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

来源:互联网 发布:汽车修理厂软件手机版 编辑:程序博客网 时间:2024/06/06 20:16
使用方向键 在RPG中的格子中移动是很常见的功能! 
可是在实际制作中会遇到很多问题
本人资质一般 弄了一个这个 弄了好久 
基本上完美解决了同时按多个按键的问题 
 
我以前的做法是 按哪个键 就忘哪个方向走 效率低 而且体验差
所以改了这个方案
 
当然 你可以继续优化这代码 并发给我 万分感谢  

如果你也专注2D的RPG游戏开发 可以加我的微信 一起研究


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 操作下一步的位置, 走位很流畅 没有按住就会停一会儿再走的那种 停滞感
 
希望能帮助到大家 更希望抛砖引玉 谢谢大家