根据玩家位置旋转纹理

时间:2014-12-27 22:10:37

标签: java libgdx

我正在进行一场二维游戏,其中包括一架与太空飞船战斗的飞机,我希望宇宙飞船在玩家位置的作用下旋转,这样他们总是面对玩家的"头&#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);
}

敌人太空飞船旋转,但他们并不总是面对玩家: enter image description here

2 个答案:

答案 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相对于其中心的任何点。

希望有意义