Phaser 3角色跳跃异常求助:跳跃高度不足或空中可跳且下落缓慢
解决Phaser 3角色跳跃异常问题
嘿,我一眼就瞅到你代码里的问题啦!你的角色跳跃异常完全是因为moveKid函数里的一个小失误——在左右方向键都没按下的else分支里,你不该把Y轴速度也重置为0的,这直接把重力的作用给抵消了!
问题根源拆解
- 保留
this.kid.body.touching.down时跳不高:角色按下跳跃键后,只要左右方向键没按住,就会触发else分支,this.kid.setVelocityY(0)会立刻把跳跃的向上速度清零,导致角色只能弹起一点点就停住; - 移除判断后下落慢+空中连跳:虽然能跳起来,但下落过程中只要左右键没按,Y轴速度就会被强制设为0,重力完全失效,所以下落极慢;同时没有
touching.down的限制,只要按上键就能一直跳。
修复后的代码
只需要把else分支里的this.kid.setVelocityY(0)删掉,只保留X轴速度的重置就行:
moveKid() { if (this.cursorKeys.left.isDown) { this.kid.setVelocityX(-300) } else if (this.cursorKeys.right.isDown) { this.kid.setVelocityX(300) } else { this.kid.setVelocityX(0); // 移除这行错误的Y轴速度重置 } if (this.cursorKeys.up.isDown && this.kid.body.touching.down) { this.kid.setVelocityY(-300); } }
修复效果说明
修改后:
- 重力会正常作用于角色,下落时Y轴速度会自然增加,角色能正常落地;
this.kid.body.touching.down的判断依然有效,只有角色接触地面时才能触发跳跃,避免空中连跳;- 左右移动的逻辑不受影响,松开方向键后角色会立刻停止水平移动。
内容的提问来源于stack exchange,提问作者Maguii Ta




