现在小猫还只是原地跳跃,下面给主角添加键盘输入
用A和D控制它的跳跃方向
在setJumpAction()
方法的下面添加键盘事件响应函数,代码如下
onKeyDown (event) {
// 当键被按下时设一个标示
switch(event.keyCode) {
case cc.macro.KEY.a:
this.accLeft = true;
break;
case cc.macro.KEY.d:
this.accRight = true;
break;
}
},
onKeyUp (event) {
// 当键被释放时设一个标示
switch(event.keyCode) {
case cc.macro.KEY.a:
this.accLeft = false;
break;
case cc.macro.KEY.d:
this.accRight = false;
break;
}
},
然后修改onLoad()
方法
在其中加入向左和向右加速的开关
以及主角当前在水平方向的速度
最后再调用cc.systemEvent
在场景加载后开始监听键盘输入,代码如下
onLoad: function () {
// 初始化跳跃动作
this.jumpAction = this.setJumpAction();
this.node.runAction(this.jumpAction);
// 加速度方向开关
this.accLeft = false;
this.accRight = false;
// 主角当前水平方向速度
this.xSpeed = 0;
// 初始化键盘输入监听
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
},
onDestroy () {
// 取消键盘输入监听
cc.systemEvent.off(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
cc.systemEvent.off(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
},
最后修改update()
方法的内容,添加
- 加速度
- 速度
- 主角当前位置的设置,代码如下
update: function (dt) {
// 根据当前加速度方向每帧的更新速度
if (this.accLeft) {
this.xSpeed -= this.accel * dt;
} else if (this.accRight) {
this.xSpeed += this.accel * dt;
}
// 限制主角的速度不能超过最大值
if ( Math.abs(this.xSpeed) > this.maxMoveSpeed ) {
this.xSpeed = this.maxMoveSpeed * this.xSpeed / Math.abs(this.xSpeed);
}
// 根据当前速度更新主角的位置
this.node.x += this.xSpeed * dt;
},
update
在场景加载后就会每帧调用一次
一般把需要经常计算或及时更新的逻辑内容放在这里
在游戏中,根据键盘输入获得加速度方向后,就需要每帧在update中计算主角的速度和位置