因此,在我正在使用andengine制作的Android游戏中,我将其设置为当我触摸并拖动玩家精灵时,它会不断旋转,以便角色始终面向其行进的方向。
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 个明显不同的角度之间连续交替(通常其中一个是正确的)。
编辑:已解决,见下文
问题是 Body.setTransform 角度参数以弧度而不是度为单位取值。而且引擎的记录太少了...
math.todegree(math.atan(....))....
您应该使用 toDegree()
.