根据玩家位置旋转纹理

我正在进行一场二维游戏,其中包括一架与太空船通过导弹作战的飞机,我希望宇宙飞船在玩家位置的作用下旋转,这样他们总是面对着“头部”的玩家。 玩家可以在y和x方向上自由移动。 玩家和宇宙飞船有一个Vector2 pos变量,它对应于它们的实际位置。 任何帮助,将不胜感激。

这是我(现在正在工作)的代码:

public void render(SpriteBatch sb) { Vector2 temp = new Vector2(); float angle = temp.set(entityManager.getPlayer().pos).sub(pos).angle(); TextureRegion region = new TextureRegion(texture); sb.draw(region, pos.x, pos.y, 0, 0, texture.getWidth(), texture.getHeight(), 1.0f, 1.0f,angle+90); } 

敌人太空船旋转,但他们不总是面对玩家: 在此处输入图像描述

@ dwn的答案在数学上是正确的,但是当你处理LibGDX框架时,最好使用本机工具。

如果你有敌人和玩家的位置存储在Vector2那么你可以进行一些方便的计算。 例如,要确定特定敌人和玩家之间的角度:

 Vector2 enemyPos; Vector2 playerPos; Vector2 temp; float angle = temp .set(playerPos) .sub(enemyPos) .angle(); 

这将为您提供您想要的。 当然最好将temp矢量保存在公共空间的某个地方,以便在如此众多的计算中使用它。 你最好检查一下其他方便的Vector2方法,它会让你的生活变得非常轻松。

祝好运。

我认为这应该有效。 组..

 v = centerPosOfShip - centerPosOfUFO 

规范化…

 v /= sqrt( vx * vx + vy * vy ) 

所以现在我们可以说v = [cos(theta)sin(theta)]; 旋转矩阵是……

 [ cos(theta) -sin(theta) ] [ sin(theta) cos(theta) ] 

所以我们可以用v-components来写…

 [ vx -vy centerPosOfUFO.x ][x] [ vy vx centerPosOfUFO.y ][y] [ 0 0 1 ][1] 

其中[xy]是UFO相对于其中心的任何点。

希望有道理