[]使用方向键 控制精灵在格子中移动

 
使用方向键 在RPG中的格子中移动是很常见的功能! 
可是在实际制作中会遇到很多问题
本人资质一般 弄了一个这个 弄了好久 
基本上完美解决了同时按多个按键的问题 
 
我以前的做法是 按哪个键 就忘哪个方向走 效率低 而且体验差
所以改了这个方案
 
当然 你可以继续优化这代码 并发给我 万分感谢  
如果你也专注2D的RPG游戏开发 可以加我的微信 一起研究
13890999
 
事件
Laya.stage.on(Laya.Event.KEY_UP,this,this.onkeyup);
Laya.stage.on(Laya.Event.KEY_DOWN,this,this.onkeydown);

Laya.timer.frameLoop(1,this,this.loop);
事件响应
onkeyup(e){
for(let i:number = 0;i<this.keyList.length;i++){
if(this.keyList[i]==e.keyCode){
this.keyList.splice(i,1);
break;
}
}
}

onkeydown(e){
if(this.keyList.indexOf(e.keyCode)<0){
this.keyList.push(e.keyCode);
}
}

loop(){
if(this.sp.x!=this.next_x||this.sp.y!=this.next_y){
if(this.sp.x!=this.next_x){
if(this.next_x>this.sp.x){
this.sp.x +=5;
}else{
this.sp.x -=5;
}
}else{

if(this.next_y>this.sp.y){
this.sp.y +=5;
}else{
this.sp.y -=5;
}
}
}else{
this.nextDirection();
}
}

nextDirection(){
this.direction = this.keyList[0];
if(this.direction==37) this.next_x -= 50;
if(this.direction==38) this.next_y -= 50;
if(this.direction==39) this.next_x += 50;
if(this.direction==40) this.next_y += 50;
}

原理说一下, 就是当按键按下时, 就会把这个键的keycode 存储到一个数组中, 抬起时就会从数组中删除这个keycode 
当一个格子走完时, 就会从数组中找到第一个keycode 操作下一步的位置, 走位很流畅 没有按住就会停一会儿再走的那种 停滞感
 
希望能帮助到大家 更希望抛砖引玉 谢谢大家
已邀请:

wudi199553

赞同来自:

多谢分享

6super

赞同来自:

版主您好!我最近也在学用AS语言做飞机大战,看了您的代码,优点是:可以几个方向键一起用,但是,如果按下一个方向不放开的话,人物的移动会一直向一个方向动。想了好久也不知道该怎么修改,才能做到按下一个方向键很久(几秒),才算执行一次移动(就是keydown只执行一次)?不知版主明白我的意思不?

要回复问题请先

商务合作
商务合作