如何在Kaboom.js中实现角色仅触地时单次跳跃
解决Kaboom.js角色仅落地可跳跃的问题
要实现角色只有接触地面/陆地时才能跳跃、空中无法二次跳跃的效果,只需利用Kaboom.js中body组件自带的isGrounded()方法判断角色的落地状态,再触发跳跃逻辑即可。同时要确保所有可站立的地面实体都标记为solid,这样isGrounded()才能正确检测。
修改后的完整代码
import kaboom from "kaboom" const SPEED = 300 const JUMP_FORCE = 500 const GRAVITY_AMOUNT = 1000 // initialize context kaboom({ background: "#000" }) // load assets loadSprite("player", "sprites/player.png") loadSprite("spider", "sprites/spider.png") loadSprite("floor", "sprites/floor.png") gravity(GRAVITY_AMOUNT) const player = add([ sprite("player"), pos(250, height() - 100), area(), body() ]) const grass = add([ rect(width(), 16), pos(0, height() - 64), area(), solid(), color(60, 21, 176) ]) const land = add([ rect(width(), 48), pos(0, height() - 48), area(), solid(), color(14, 15, 97) ]) // 空格跳跃:仅落地时触发 onKeyPress("space", () => { if (player.isGrounded()) { player.jump(JUMP_FORCE) } }) onKeyDown("a", () => { player.move(-SPEED, 0) }) onKeyDown("d", () => { player.move(SPEED, 0) }) var floor = add([ sprite("floor"), scale(0.5), pos(120, height() - 150), area(), z(-1) ]) action(() => { if(player.pos.y < height() - floor.height){ floor.use(body()) floor.use(solid()) // 标记为solid,让player能检测到站在上面 } }) // 鼠标点击跳跃:仅落地时触发 onMouseDown(() => { if (player.isGrounded()) { player.jump(JUMP_FORCE) } }) // 触摸跳跃:仅落地时触发 onTouchStart(() => { if (player.isGrounded()) { player.jump(JUMP_FORCE) } })
关键修改说明
- 所有跳跃触发逻辑(空格、鼠标、触摸)中,添加
player.isGrounded()判断,仅当返回true时才执行跳跃动作 - 给动态添加的
floor实体加上solid()标记,确保isGrounded()能识别它为可站立的地面
isGrounded()方法会自动检测角色的body是否与带有solid标记的实体接触,完美适配你场景中的grass、land和动态生成的floor。
内容的提问来源于stack exchange,提问作者Jahin Ahnaf
相关产品推荐
相关产品推荐

