21.5 C
Brasília
segunda-feira, dezembro 23, 2024

Como fazer movimento 2D de cima para baixo sem usar Rigi2D? – Cocos Creator


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

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay Connected

0FansLike
0FollowersFollow
0SubscribersSubscribe
- Advertisement -spot_img

Latest Articles