Cocos3.4以后移除了SystemEvent 改用input来注入键盘事件 cocos键盘输入cocos键盘事件

Cocos3.4以后移除了SystemEvent 改用input来注入键盘事件

在这里插入图片描述

所以要注册按键事件如下`

想使用什么事件就用什么事件

    /**初始化 */
    InitialWork() {
    
    
        this.TheGameManager = find('Canvas/GameManager').getComponent(GameManager);
        //按键注册
        // this.node.on(Input.EventType.KEY_DOWN, this.KeyDownEvent, this) 这个用不了 不是这么用的
        input.on(Input.EventType.KEY_DOWN, this.KeyDownEvent, this) //这个是单次按下一次
        input.on(Input.EventType.KEY_UP, this.KeyUpEvent, this) //这个是单次放开按下一次
        // input.on(Input.EventType.KEY_PRESSING, this.KeyDownEvent, this) //这个会持续触发
        console.log('键盘初始化完成')
    }
    start() {
    
    
        this.InitialWork()

    }

因为key_pressing虽然会一直触发,但是他无法一开始就触发,他会停顿一下,我不想要这样的效果。我希望的是一按下就马上持续触发,所以还是得自己写一个状态,来控制摄像头移动。

这个是使用enum来方便我的使用

/**方向 */
export enum Direction {
    
    
       /**上 */
    'up' = 0,
    /**下 */
    'down' = 1,
    /**左 */
    'left' = 2,
    /**右 */
    'right' = 3,
    /**居中  */
    'mid' = 4
}

使用垂直和水平状态来确定


    /**垂直状态 */
    VerticalFlag: Direction = Direction.mid;
    /**水平状态 */
    HorizontalFlag: Direction = Direction.mid;

下面是摄像机移动相关的代码 不算很多
结合注释来看吧

//移动逻辑相关代码
 /**垂直状态 */
    VerticalFlag: Direction = Direction.mid;
    /**水平状态 */
    HorizontalFlag: Direction = Direction.mid;

    /**移动速度 从GameManager中获取 */
    CameraMoveSpeed: number = 1;
    /**游戏系统管理器 */
    TheGameManager: GameManager;
    /**初始化 */
    InitialWork() {
    
    
        this.TheGameManager = find('Canvas/GameManager').getComponent(GameManager);
        //按键注册
        // this.node.on(Input.EventType.KEY_DOWN, this.KeyDownEvent, this) 这个用不了 不是这么用的
        input.on(Input.EventType.KEY_DOWN, this.KeyDownEvent, this) //这个是单次按下一次
        input.on(Input.EventType.KEY_UP, this.KeyUpEvent, this) //这个是单次按下一次
        input.on(Input.EventType.KEY_PRESSING, this.KeyDownEvent, this) //这个会持续触发
        console.log('键盘初始化完成')
    }
    start() {
    
    
        this.InitialWork()

    }
    /**键盘被按下的时候的情况
     * 会更改状态
     */
    KeyDownEvent(key: EventKeyboard) {
    
    
        let Camera = this.TheGameManager.GameCamera.node;
        if (key.keyCode == KeyCode.KEY_A) {
    
    
            this.HorizontalFlag = Direction.left
        }

        if (key.keyCode == KeyCode.KEY_D) {
    
    
            this.HorizontalFlag = Direction.right
        }

        if (key.keyCode == KeyCode.KEY_S) {
    
    
            this.VerticalFlag = Direction.down
        }

        if (key.keyCode == KeyCode.KEY_W) {
    
    
            this.VerticalFlag = Direction.up
        }
    }

    /**键盘被松开的时候的情况
 * 会更改状态
 * 因为防止左右两个按键同时按下 所以要再加一个对手按键是否被按下的判定
 * 看一下当前状态是不是反过来就行
 * 否则移动的时候会卡
 */
    KeyUpEvent(key: EventKeyboard) {
    
    
        let Camera = this.TheGameManager.GameCamera.node;
        if (key.keyCode == KeyCode.KEY_A && this.HorizontalFlag != Direction.right) {
    
    
            this.HorizontalFlag = Direction.mid
        }

        if (key.keyCode == KeyCode.KEY_D && this.HorizontalFlag != Direction.left) {
    
    
            this.HorizontalFlag = Direction.mid
        }

        if (key.keyCode == KeyCode.KEY_S && this.VerticalFlag != Direction.up) {
    
    
            this.VerticalFlag = Direction.mid
        }

        if (key.keyCode == KeyCode.KEY_W && this.VerticalFlag != Direction.down) {
    
    
            this.VerticalFlag = Direction.mid
        }
    }
    /**摄像头移动 */
    CameraMoving() {
    
    
        let DeltaPosX = 0
        let DeltaPosY = 0
        // 算一个X和Y的距离出来 给摄像机加上
        if (this.HorizontalFlag != Direction.mid) {
    
    
            DeltaPosX = this.CameraMoveSpeed * (this.HorizontalFlag == Direction.right ? 1 : -1)
        }
        if (this.VerticalFlag != Direction.mid) {
    
    
            DeltaPosY = this.CameraMoveSpeed * (this.VerticalFlag == Direction.up ? 1 : -1)
        }
        if (DeltaPosX != 0 || DeltaPosY != 0) {
    
    
            let Camera = this.TheGameManager.GameCamera.node;

            Camera.setWorldPosition(new Vec3(Camera.getWorldPosition().x + DeltaPosX, Camera.getWorldPosition().y + DeltaPosY))
        }
    }
    update() {
    
    
        this.CameraMoving()
    }

猜你喜欢

转载自blog.csdn.net/Yourset/article/details/126439235