Angenommen, es gibt Fehler, die von außen auf den Bildschirm kommen. Dazu benötigen wir 4 Koordinaten (StartX, StartY, TargetX, TargetY). Wie kann man die Fehler in die richtige Richtung drehen? Ich habe stundenlang damit herumgespielt und konnte diesen Teil nicht herausfinden. Also kommt der Fehler auf den Bildschirm, aber er zeigt nicht in die richtige Richtung. (Die vier Koordinaten sind Zufallszahlen).
Ich berechne den Gradienten der Linie, wie ich es in der Schule gelernt habe:
int deltaY = TargetY - StartY;
int deltaX = TargetX - StartX;
float gradient = (float)deltaY / (float)deltaX;
Dann der Winkel, um den Fehler zu drehen:
float angle = (float) (Math.atan(gradient) * 180 / PI);
Hier ist dann der Dreh- und Bewegungsmodifikator:
registerEntityModifier(new RotationModifier(0.3f, 0, angle) {
@Override
protected void onModifierFinished(IEntity pItem) {
super.onModifierFinished(pItem);
registerEntityModifier(new MoveModifier(0.8f, StartX, TargetX, StartY, TargetY) {
@Override
protected void onModifierFinished(IEntity pItem) {
super.onModifierFinished(pItem);
}
});
}
});
Die Lösung ist komplexer, da bei einer Linie mit einem bestimmten Gradienten der Fehler aus zwei Richtungen kommen kann und daher in zwei Richtungen zeigen kann. Ich weiß, dass ein Gradient von 1/2 26,56 Grad bedeutet und im AndEngine-Koordinatensystem bedeutet dies -26,56 oder -206,56 Grad, je nachdem, von welcher Seite der Fehler kommt.