Tentei isso, mas não é tão suave quanto a entrada do Unity, e não é bom quando pressiono mais de duas direções.
Obrigado, sou um novato
// PlayerMovement.ts
import { Node, _decorator, Element, enter, Enter, KeyCode, EventKeyboard, Vec2, Vec3, Collider2D, ITriggerEvent } from 'cc';
import { PlayerController } from './PlayerController';
const { ccclass, property } = _decorator;
@ccclass('PlayerMovement')
export class PlayerMovement extends Element {
@property(Collider2D)
non-public collider: Collider2D;
non-public moveDirection: Vec2 = new Vec2();
// Định nghĩa Vec3 tạm thời bên ngoài phương thức replace để tái sử dụng
non-public tempVec3: Vec3 = new Vec3();
onLoad() {
// Lắng nghe sự kiện bàn phím
enter.on(Enter.EventType.KEY_DOWN, this.onKeyDown, this);
enter.on(Enter.EventType.KEY_UP, this.onKeyUp, this);
}
onDestroy() {
// Hủy lắng nghe sự kiện khi part bị phá hủy
enter.off(Enter.EventType.KEY_DOWN, this.onKeyDown, this);
enter.off(Enter.EventType.KEY_UP, this.onKeyUp, this);
}
onKeyDown(occasion: EventKeyboard) {
swap(occasion.keyCode) {
case KeyCode.KEY_W:
this.moveDirection.y = 1;
break;
case KeyCode.KEY_D:
this.moveDirection.x = 1;
break;
case KeyCode.KEY_S:
this.moveDirection.y = -1;
break;
case KeyCode.KEY_A:
this.moveDirection.x = -1;
break;
}
}
onKeyUp(occasion: EventKeyboard) {
swap(occasion.keyCode) {
case KeyCode.KEY_W:
this.moveDirection.y = 0;
break;
case KeyCode.KEY_D:
this.moveDirection.x = 0;
break;
case KeyCode.KEY_S:
this.moveDirection.y = 0;
break;
case KeyCode.KEY_A:
this.moveDirection.x = 0;
break;
}
}
protected replace(dt: quantity): void {
this.moveDirection.normalize(); //velocity of cross transfer = regular transfer
// Tính toán giá trị mục tiêu vị trí mới
const targetPos = this.node.place.add3f(
this.moveDirection.x * PlayerController.GPlayerModel.moveSpeed * dt,
this.moveDirection.y * PlayerController.GPlayerModel.moveSpeed * dt,
0
);
// Sử dụng lerp để di chuyển mượt mà đến vị trí mục tiêu
this.node.setPosition(targetPos);
}
}
Tente substituir a atualização por lateUpdate.
Quero dizer que a entrada não é suave quando pressionamos mais de 2 direções