LayaBox键盘控制移动遇到的问题

在添加键盘监听的时候发现WASD控制移动出现的问题

Laya.stage.on(Laya.Event.KEY_DOWN, this, this.onkeyDown);
Laya.stage.on(Laya.Event.KEY_UP, this, this.onkeyUp);

onkeyDown(event) {
    switch (event.keyCode) {
        case 65:
            this.deltaX = -1;
            this.moveCtr();
            break;
        case 68:
            this.deltaX = 1;
            this.moveCtr();
            break;
        case 83:
            this.deltaY = 1;
            this.moveCtr();
            break;
        case 87:
            this.deltaY = -1;
            this.moveCtr();
            break;
    }
}

onkeyUp(event) {
    switch (event.keyCode) {
        case 65:
            this.deltaX = 0;
            this.stopMove();
            break;
        case 68:
            this.deltaX = 0;
            this.stopMove();
            break;
        case 83:
            this.deltaY = 0;
            this.stopMove();
            break;
        case 87:
            this.deltaY = 0;
            this.stopMove();
            break;
    }
}

当我按下其中一个键的时候,等一两秒再按下第二个键,这时候第一个的方法不会再执行,这就导致在移动的时候总会有停顿的发生,很不自然。

目前的解决办法是添加几个状态,将四个状态添加到数组中去,抬起其中一个键的时候就删掉数组中对应的元素。

this.moveArray=[];
onkeyDown(event) {
    switch (event.keyCode) {
        case 65:
            this.deltaX = -1;
            this.moveCtr();
            if (this.moveArray.indexOf("Left") == -1) {
                this.moveArray.push("Left");
            }
            break;
        case 68:
            this.deltaX = 1;
            this.moveCtr();
            if (this.moveArray.indexOf("Right") == -1) {
                this.moveArray.push("Right");
            }
            break;
        case 83:
            this.deltaY = 1;
            this.moveCtr();
            if (this.moveArray.indexOf("Down") == -1) {
                this.moveArray.push("Down");
            }
            break;
        case 87:
            this.deltaY = -1;
            this.moveCtr();
            if (this.moveArray.indexOf("Up") == -1) {
                this.moveArray.push("Up");
            }
            break;
    }
}
onkeyUp(event) {
    switch (event.keyCode) {
        case 65:
            this.deltaX = 0;
            for (let i = 0; i < this.moveArray.length; i++) {
                if (this.moveArray[i] == "Left") {
                    this.moveArray.splice(i, 1);
                }
            }

            break;
        case 68:
            this.deltaX = 0;
            for (let i = 0; i < this.moveArray.length; i++) {
                if (this.moveArray[i] == "Right") {
                    this.moveArray.splice(i, 1);
                }
            }
            break;
        case 83:
            this.deltaY = 0;
            for (let i = 0; i < this.moveArray.length; i++) {
                if (this.moveArray[i] == "Down") {
                    this.moveArray.splice(i, 1);
                }
            }
            break;
        case 87:
            this.deltaY = 0;
            for (let i = 0; i < this.moveArray.length; i++) {
                if (this.moveArray[i] == "Up") {
                    this.moveArray.splice(i, 1);
                }
            }
            break;
    }
    if (this.moveArray.length == 0) {
        this.stopMove()
    }
    else {
        switch (this.moveArray[0]) {
            case "Left":
                this.deltaX = -1;
                this.moveCtr()
                break;
            case "Right":
                this.deltaX = 1;
                this.moveCtr()
                break;
            case "Down":
                this.deltaY = 1;
                this.moveCtr()
                break;
            case "Up":
                this.deltaY = -1;
                this.moveCtr()
                break;
        }
    }
}

目前这样改就不会出现停顿的问题了,有其他方法的欢迎讨论。 

相关推荐

  1. LayaBox键盘控制移动遇到问题

    2024-03-21 20:00:02       38 阅读
  2. 键盘控制小蛇移动

    2024-03-21 20:00:02       30 阅读
  3. 串口触摸屏键盘控制

    2024-03-21 20:00:02       21 阅读
  4. Vscode移植到VS2010遇到问题C++

    2024-03-21 20:00:02       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-21 20:00:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-21 20:00:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-21 20:00:02       82 阅读
  4. Python语言-面向对象

    2024-03-21 20:00:02       91 阅读

热门阅读

  1. opencv | opencv中blobFromImage函数解析

    2024-03-21 20:00:02       43 阅读
  2. el-table分页多选,选一个其他类型相同的也选中

    2024-03-21 20:00:02       39 阅读
  3. CSS常见选择器

    2024-03-21 20:00:02       46 阅读
  4. Linux/Ubuntu/Debian的终端中&和&&的区别

    2024-03-21 20:00:02       39 阅读
  5. C++认识及域的概念

    2024-03-21 20:00:02       44 阅读
  6. python与excel第四节 批量新增、删除工作表

    2024-03-21 20:00:02       45 阅读
  7. GIS插值算法--克里金插值算法

    2024-03-21 20:00:02       38 阅读