Итак, в моей игре на андроид, которую я делаю с anddengine, я настроил ее так, что я касаюсь и перетаскиваю спрайт игрока, он постоянно вращается, так что персонаж всегда направлен в направлении своего движения.
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 отчетливо разными углами (обычно один из них правильный).
edit: решено, см. Ниже