2014-12-07 89 views
2

我使用当前的鼠标位置来瞄准玩家精灵,但我没有得到最好的结果。我希望我的精灵在我的光标在屏幕上的任何地方指向方向。这是我想要得到的结果。 (当我移动鼠标喷射缓缓转动)enter image description here雪碧旋转不正常工作LibGDX

但是,这是我所得到的:1)当我的鼠标位置y = 0喷气精灵旋转速度很慢(但轮换从未停止)

enter image description here

2)当我的Y =(屏幕高度)精灵旋转非常快(它也永远不会停止) enter image description here 这里是我的代码:我的更新方法

public void update(float dt){ 
    time += dt; 
    float yInput = (Gdx.graphics.getHeight() - Gdx.input.getY()); 
    vec.set(Gdx.input.getX() - position.x, yInput - position.y).nor(); 
    //position is a Vector2 update sprite coordinates 
    position.x += vec.x * 15f; 
    position.y += vec.y * 15f; 
} 

这是我的画法

public void draw(){ 
    batch.begin(); 
    sprite.setPosition(position.x - sprite.getWidth()/2, position.y - sprite.getHeight()/2); 

    float xInput = Gdx.input.getX(); 
    float yInput = (Gdx.graphics.getHeight() - Gdx.input.getY()); 

    float angle = MathUtils.radiansToDegrees * MathUtils.atan2(yInput - position.y, xInput - position.x); 

    if(angle < 0){ 
     angle += 360; 
    } 
    sprite.rotate(angle); 

    sprite.draw(batch); 
    batch.end(); 
} 
+0

你是什么意思“没有得到最好的结果”? – grimrader22 2014-12-07 17:31:54

+0

当我将鼠标的Y位置更改为顶部时,我的精灵旋转得非常快,而这绝对不是我想要的。 – David 2014-12-07 17:34:32

回答

2

在你draw法,用sprite.setRotation(angle);更换sprite.rotate(angle);

rotate()将相对于当前旋转旋转精灵。 atan2返回一个绝对角度,这可能会导致您的问题。

+0

非常感谢! – David 2014-12-07 20:04:31