I do this nevertheless it not easy like Unity enter, not good when press greater than two instructions.
Thanks u, Im a beginner
// PlayerMovement.ts
import { Node, _decorator, Part, enter, Enter, KeyCode, EventKeyboard, Vec2, Vec3, Collider2D, ITriggerEvent } from 'cc';
import { PlayerController } from './PlayerController';
const { ccclass, property } = _decorator;
@ccclass('PlayerMovement')
export class PlayerMovement extends Part {
@property(Collider2D)
personal collider: Collider2D;
personal 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
personal 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(); //pace 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);
}
}