我正在尝试修改这段代码,以便我的播放器能够拍摄。我被困在玩家实际上没有拍摄任何东西的地方(没有在空间点击上创建图像,虽然没有错误概述),导弹只需要在我的画布上向上移动。我希望如果这个问题的任何答案也提供某种形式的学习,因为我有兴趣真正理解如何正确地实现这一点,只需要某种快速修复。
答案 0 :(得分:1)
当setInterval
调用moveBullet
时,this
值不会是项目符号,它将是window
。尝试使用以下命令将函数绑定到项目符号:
setInterval(bullets[bullets.length - 1].moveBullet.bind(bullets[bullets.length - 1]), 25);
请参阅This link了解详情。
编辑:使用更多修正程序进行更新:
您应该在浏览器中显示控制台(在大多数浏览器中为F12)。这将列出您遇到的一些错误。
x
和y
。请改用spaceShip.x
和spaceShip.y
。angle
,无法在任何地方定义movebullet
函数。它应该是moveBullet
编辑(2):更多修复 还有几个问题需要解决。
render
函数更新整个背景,这意味着子弹即使被绘制也会立即被覆盖。您应该将实际的子弹绘图移动到渲染功能。我已经使用其中的一些修复程序更新了原始的JSFiddle,足以让它绘图(不擦除)。你可以找到它here。我也将它更改为每个空间按下一个子弹(以帮助调试)。
目前,我只是停止绘制背景,以便您可以看到子弹,但是您应该看看将子弹绘图(不是移动)移动到渲染功能。