You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Kaboom.js中player.jump is not a function报错

问题根因

报错TypeError: player.jump is not a function是因为你在定义player游戏对象时,把body()组件注释掉了。
在Kaboom v0.5.0版本中,jump()、resolve()这些物理相关的方法,都是body()组件提供的内置方法,游戏对象没有挂载这个组件时,调用对应方法就会报不存在的错误。
除此之外你的现有逻辑还有两处不符合Flappy Bird的常规设计:

  • 给小鸟绑定了持续水平向右的移动,没有开启重力下落
  • 管道是静止的,没有向左的相对移动,无法形成闯关的玩法
修复方法
  1. 取消player定义中body()组件的注释,给小鸟挂载物理能力
  2. 移除小鸟水平向右自动移动的逻辑,依靠body()自带的重力实现自然下落
  3. 空格触发跳跃时传入你预先定义的JUMP_SPEED参数控制跳跃高度
  4. 给所有管道添加向左移动的逻辑,移出屏幕后自动销毁避免性能问题
  5. 碰撞管道后补充跳转结算场景的逻辑,避免游戏卡死
修复后可运行的核心代码

JavaScript部分

kaboom({
  global: true,
  fullscreen: true,
  scale: 1,
  debug: true,
  clearColor: [0,0,0]
})

const MOVE_SPEED = 120
const JUMP_SPEED = 800

loadSprite('tubo_sinistra', 'https://i.imgur.com/YVW4m89.png')
loadSprite('tubo_punta_sinistra', 'https://i.imgur.com/JcvhMs4.png')
loadSprite('tubo_punta_destra', 'https://i.imgur.com/wHB9HzE.png')
loadSprite('tubo_destra', 'https://i.imgur.com/Drs3q84.png')
loadSprite('player', 'https://i.imgur.com/MOOR8tT.png')


scene("game", ({ level, score }) => {
  layer(['bg', 'obj', 'ui'], 'obj')
      
  const maps = [
    [
      '    sd   sd   sd   sd   sd   sd   sd   sd   sd   sd  ',
      '    sd   sd   sd   sd   sd   sd   sd   sd   sd   sd  ',
      '    sd   sd   sd                                     ',
      '    sd   sd   sd                                     ',
      '    sd        sd                                     ',
      '              sd                                     ',
      '                                                     ',
      '         sd                                          ',      
      '    sd   sd                                          ',
      '    sd   sd   sd                                     ',
      '    sd   sd   sd   sd   sd   sd   sd   sd   sd   sd  ',
      '    sd   sd   sd   sd   sd   sd   sd   sd   sd   sd  ',
    ],
  ]

  const levelCfg = {
    width: 48,
    height: 48,
    's': [sprite('tubo_sinistra'), solid(), 'wall',scale(4)],
    'd': [sprite('tubo_destra'), solid(), 'wall', scale(4)],
  }

  addLevel(maps[level], levelCfg)

  const player = add([
    sprite('player'),
    scale(2.5),
    pos(5, 190),
    body(), // 恢复body组件,提供jump、resolve等物理方法
    {
      dir: vec2(1,0),
    }
  ])

  // 处理碰撞推挤逻辑
  player.action(() => {
    player.resolve()
  })
      
  player.collides('wall', () => {
    destroy(player)
    go("lose", { score: score })
  })

  // 管道自动向左移动,出屏销毁
  action('wall', (wall) => {
    wall.move(-MOVE_SPEED, 0)
    if (wall.pos.x < -50) {
      destroy(wall)
    }
  })

  // 空格触发跳跃
  keyPress('space', () => {
    player.jump(JUMP_SPEED)
  })

      
})

scene("lose", ({ score }) => {
  add([text(score, 32), origin('center'), pos(width()/ 2, height() /2)])
})

start("game", { level: 0, score: 0})

HTML部分(无需修改,保持原有即可)

<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Flappy Bird
    </title>
    <style>
    body {
        margin: 0;
        overflow: hidden;
    }
    </style>
</head>
<body>
    <script src="https://kaboomjs.com/lib/0.5.0/kaboom.js"></script>
    <script src="flappy_bird.js"></script>
</body>
</html>

内容的提问来源于stack exchange,提问作者SGTMM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:18:15