Android - Math.atan2的问题

时间:2011-05-18 06:36:30

标签: java android andengine

所以在我的安卓游戏中,我正在设置它,因此当我触摸并拖动玩家精灵时,它会不断旋转,以便角色始终面向它正在行进的方向。

public class Player extends AnimatedSprite {
private float lastX = Game.centerX;
private float lastY = Game.centerY;
private static int angle = 0;

// ...

@Override
public boolean onAreaTouched(final TouchEvent sceneTouchEvent, final float touchAreaLocalX, final float touchAreaLocalY) {
    Body body = OrbCatch.physicsWorld.getPhysicsConnectorManager().findBodyByShape(this);
    if (sceneTouchEvent.getAction() == TouchEvent.ACTION_MOVE) {
        float currentX = sceneTouchEvent.getX();
        float currentY = sceneTouchEvent.getY();
        angle = (int) (Math.atan2(currentY - lastY, currentX - lastX) * 180 / Math.PI);
        lastX = currentX;
        lastY = currentY;
    }
    body.setTransform(new Vector2(sceneTouchEvent.getX(),sceneTouchEvent.getY() )
    .mul(1/PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT),angle);
    return true;
}

}

关键是:

angle = (int) (Math.atan2(currentY - lastY, currentX - lastX) * 180 / Math.PI)

它采用最后已知的坐标和当前坐标,计算它们之间的角度,并将其从弧度转换为度数。好吧,昨天一切正常,但是尽管今天没有改变这个代码,但它表现得很奇怪。精灵的方向变化不大,没有明显的模式。如果我沿直线路径移动它,它会连续地在2或3个明显不同的角度之间交替(通常其中一个是正确的角度)。

编辑:已解决,见下文

2 个答案:

答案 0 :(得分:1)

问题是Body.setTransform角度参数采用弧度值,而不是度数。 Andengine的记录很差......

答案 1 :(得分:0)

math.todegree(math.atan(....))....

您应该使用toDegree()