我正在进行一场二维游戏,其中包括一架与太空飞船战斗的飞机,我希望宇宙飞船在玩家位置的作用下旋转,这样他们总是面对玩家的"头&#34 ;.玩家可以在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);
}
敌人太空飞船旋转,但他们并不总是面对玩家:
答案 0 :(得分:1)
@ dwn的答案在数学上是正确的,但是当你处理LibGDX框架时,最好使用原生工具。
如果你有敌人和玩家的位置存储在Vector2
s,那么你可以稍微方便地执行计算。
例如,要确定特定敌人和玩家之间的角度:
Vector2 enemyPos;
Vector2 playerPos;
Vector2 temp;
float angle = temp
.set(playerPos)
.sub(enemyPos)
.angle();
这将为您提供您想要的。当然,最好将temp
向量保留在公共空间的某个地方,以便在如此多的计算中使用它。你最好检查其他方便的Vector2
方法,这将使你的生活变得非常轻松。
答案 1 :(得分:0)
我认为这应该有效。设置..
v = centerPosOfShip - centerPosOfUFO
...正常化
v /= sqrt( v.x * v.x + v.y * v.y )
所以现在我们可以说v = [cos(theta)sin(theta)];旋转矩阵是......
[ cos(theta) -sin(theta) ]
[ sin(theta) cos(theta) ]
所以我们可以用v-components来写...
[ v.x -v.y centerPosOfUFO.x ][x]
[ v.y v.x centerPosOfUFO.y ][y]
[ 0 0 1 ][1]
其中[x y]是UFO相对于其中心的任何点。
希望有意义