2013-03-13 93 views
1

我试图让我的帆布游戏中的精灵不断向玩家移动,直到碰撞。执行此相关的功能是update()功能:敌方精灵走向玩家的一条奇怪的道路

​​

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

这是一种作品,但是敌人距离玩家约300像素,然后开始转向左侧并离开玩家,在朝向玩家方向90度的角度。

由于这是一种很难解释,我录一个简短的视频来帮助显示问题:http://www.screenr.com/AGz7

敌人是橙色精灵和玩家是白茫茫的一片。

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

回答

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。

+0

'-2.35'在那里,因为精灵开始在错误的旋转,这只是一个快速修复现在但它是正确的:)另外,吨他修复工作。谢谢!我现在看到,虽然我一直使用错误的方法让精灵跟随玩家,因为他们在玩家周围移动而不是直接朝着玩家移动。 – 2013-03-13 02:25:26

+0

@JamesDawson,通过交换cos和sin基本上你正在做的就是使怪物的目标相对于'他们想去的地方'成90度角。所以他们会围成一圈并不奇怪。 – Patashu 2013-03-13 02:26:49