1

我试图让我的画布游戏中的精灵不断向玩家移动,直到它发生碰撞。执行此操作的相关函数是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.x, this.y,this.rotationthis.speed分别是敌人的 X 位置、Y 位置、旋转和速度。

它有点工作,但是敌人距离玩家大约 300 像素,然后开始转向左侧并远离玩家,与它朝向玩家的方向成 90 度角。

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

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

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

4

1 回答 1

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。

于 2013-03-13T02:21:07.863 回答