在添加键盘监听的时候发现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;
}
}
}
目前这样改就不会出现停顿的问题了,有其他方法的欢迎讨论。