2014-03-31 47 views
0

我正在尝试修改这段代码,以便我的播放器能够拍摄。我被困在玩家实际没有拍摄任何东西的地方(在空间点击时没有创建图像,虽然没有列出任何错误),导弹只需要在画布上向上行进。我宁愿如果这个问题的任何答案也给了某种形式的学习,因为我有兴趣真正理解如何正确实施这个,只是需要某种快速修复。Javascript bullet功能/射弹,2D游戏

回答

1

setInterval调用moveBullet时,this的值将不是子弹,它将是window。尝试使用功能结合子弹如下:

setInterval(bullets[bullets.length - 1].moveBullet.bind(bullets[bullets.length - 1]), 25); 

看到This link获取更多信息。

编辑:更新与修正更多:

你应该表现出你的浏览器(F12在大多数浏览器)的控制台。这将列出您遇到的一些错误。

  • drawBullet使用xy未定义。改为使用spaceShip.xspaceShip.y
  • newBullet使用angle,这是没有定义的任何地方
  • newBullet试图使用movebullet函数。它应该是moveBullet
  • drawImage需要一个图像,画布或视频元素 - 它不需要URL。

编辑(2):更多修复程序 还有几个问题需要解决。

  • 一个是你还没有改变对ctx.drawImage的调用来传递图片元素而不是URL。
  • 另一个是你的移动函数将x和y值乘以速度。这意味着一旦子弹移动,它就会离开屏幕。
  • 第三个问题是render函数更新整个背景,这意味着即使它被绘制,子弹也会立即被覆盖。您应该将实际的子弹图移动到渲染功能。

我已经用这些修复程序中的一些更新了原始的JSFiddle,足以让它绘制(没有擦除)。你可以找到它here。我也将它改为每空间按一个子弹(帮助调试)。

此刻,我只是让它停止绘制背景,以便您可以看到子弹,但您应该看看将子弹绘图(不移动)移动到渲染功能。

+0

我试过了你的建议,它没有改变我面临的问题,尽管它可能是它的一部分。 http://jsfiddle.net/2NZbL/ < - 这是一个完整的代码Jsfiddle。 –

+0

感谢您的更新,为了澄清最后一点你是否暗示我需要在我的渲染函数中为我的子弹添加ctx.drawImage? –

+0

不,您已经在moveBullet函数中调用了ctx.drawImage,但其参数不正确。 –