敌人精灵对玩家采取了一条奇怪的道路

时间:2013-03-13 02:17:08

标签: javascript math canvas 2d-games

我正在尝试让我的画布游戏中的精灵不断向玩家移动,直到碰撞。执行此操作的相关功能是update()功能:

Enemy.prototype.update = function(playerX, playerY) {
    // Rotate the enemy to face the player
    this.rotation = Math.atan2(this.y - playerY, this.x - playerX) - 2.35;

    // Move in the direction we're facing
    this.x += Math.sin(this.rotation) * this.speed;
    this.y += Math.cos(this.rotation) * this.speed;
}

this.xthis.ythis.rotationthis.speed分别是敌人的X位置,Y位置,旋转和速度。

这种方法很有效,但是敌人距离玩家大约300像素,然后开始转向左侧并远离玩家,从朝向玩家的方向以90度角度离开玩家。 / p>

由于这有点难以解释,我录制了一段快速视频来帮助显示问题:http://www.screenr.com/AGz7

敌人是橙色精灵,玩家是白色精灵。

我正在做的让敌人向玩家移动的计算有什么问题?

1 个答案:

答案 0 :(得分:2)

从写作角度/移动代码开始,这些可能是错误:

而不是 this.rotation = Math.atan2(this.y - playerY, this.x - playerX) - 2.35;

确实

this.rotation = Math.atan2(playerY - this.y, playerX - this.x);

给你正确的轮换?

推理:不要使用魔术常数,试着找出你的公式错误的原因。

而不是

this.x += Math.sin(this.rotation) * this.speed;
this.y += Math.cos(this.rotation) * this.speed;

尝试

this.x += Math.cos(this.rotation) * this.speed;
this.y += Math.sin(this.rotation) * this.speed;

推理:如果你的角度是0 =东方(如果你使用数学库函数它们是默认的),那么对于角度0你想要最大水平移动而没有垂直移动 - cos(0)= 1和sin (0)= 0。