update: function(delta) { for (var i = 0; i < this.bullets.length; i++) { this.bullets[i].velocity = this.bullets[i].speed * delta; this.bullets[i].contextX += this.bullets[i].velocity; } }, draw: function(ctx) { for (var i = 0; i < this.bullets.length; i++) { ctx.save(); // Move the context to where the player is then make it face the target degree ctx.translate(this.bullets[i].startX, this.bullets[i].startY); ctx.rotate(this.bullets[i].rotation); ctx.fillRect(this.bullets[i].contextX, -5, 10, 10); ctx.restore(); } }
上面的代码包含两个方法,它们描述了一个管理项目符号的绘制和更新的类。 更新方法沿着一个项目符号移动,然后绘制函数将其绘制到屏幕上。
canvas执行以下操作:
保存当前的canvas上下文状态
将上下文移动到子弹始发的位置
将canvas旋转到子弹击中时的方向
绘制矩形
将canvas上下文恢复到原始状态
下面是我所做的一个图像,更好地描述了canvas上下文在做什么:
所以我们知道子弹的x位置,但是这与旋转的上下文相关。 我需要知道的是子弹的X和Y属性与实际屏幕的关系。 任何想法,我怎么能做到这一点?