我正在尝试让我的画布游戏中的精灵不断向玩家移动,直到碰撞。执行此操作的相关功能是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.rotation
和this.speed
分别是敌人的X位置,Y位置,旋转和速度。
这种方法很有效,但是敌人距离玩家大约300像素,然后开始转向左侧并远离玩家,从朝向玩家的方向以90度角度离开玩家。 / p>
由于这有点难以解释,我录制了一段快速视频来帮助显示问题:http://www.screenr.com/AGz7
敌人是橙色精灵,玩家是白色精灵。
我正在做的让敌人向玩家移动的计算有什么问题?
答案 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。