Die Aufgabenstellung erscheint erstmal einfach: Der Spieler soll ein Sprite "greifen" können. Dieses frei über den Bildschirm bewegen und wenn er es "loslässt" soll es in die Richtung weiterfliegen in die er es zuletzt bewegt hat.
Alles kein Problem bis auf das letzte. Das eigentliche Problem bei der Sache ist der menschliche Faktor. Ich brauche eine Gerade um mir den Winkel der Flugrichtung zu errechnen. Aber kein Mensch bewegt seine Hand genau gerade. Ich habe nun also einen Bewegungspfad aufgezeichnet in einem Array aus Punkten. Die Wegpunkte liegen sehr nah beisammen. Das Aufzeichnen der Position läuft frameweise ab, also z.b. 60 mal die Sekunde. Wenn ich jetzt einfach hingehe und meine Gerade aus dem Endpunkt und dem letzten Wegpunkt erstelle, dann bekomme ich natürlich die falsche Richtung. Da die Gerade zu Kurz sein wird, sollte der Spieler keine extrem ruckartige Bewegung gemacht haben. Ist die Gerade nur 2 Pixel lang, kommen gerade mal 8 mögliche Richtungen raus, was natürlich Käse ist. Also ich brauch eine möglichst lange Gerade. Aber der Spieler ist nunmal ein Mensch und der Pfad enthält keine langen Geraden, da ein Mensch nunmal keine exakten Geraden ziehen kann mit seiner Hand. Einfach den Startpunkt und den Endpunkt zu nehmen funktioniert aber auch nicht, da der Spieler das Sprite ja frei umherbewegen kann und nicht die erste Bewegung schon in die Zielrichtung zeigen muss.
Also im Prinzip bräuchte ich einen Algo, der mir aus meinem "hubbeligen" Pfad mit vielen Wegpunkten einen "glatten" Pfad mit wenig Wegpunkten macht. Also quasie den menschlichen Faktor rausrechnet. Dazu müsste er erkennen ob sich die Richtung nun tatsächlich ändert im Pfad oder ob das nur die Ungenauigkeit der Hand ist.
Und da stehe ich und weis nicht wie ich das machen kann. Oder gibt es gar einen anderen viel einfacheren Ansatz dafür?
Den Aufzeichnungsinterval einfach zu ändern so das weniger Wegpunkte und längere Geraden enstehen ändert im Grunde nichts am Problem, da der Spieler durchaus auch mal für einen Moment verharren kann. Und wenn der Spieler verharrt, wird er sich wohl trotzdem um den ein oder anderen Pixel bewegen (zittrige Hand z.B.) und damit hab ich wieder ne 2 Pixel Gerade.
Hier sind ja ein paar Leute unterwegs die Fitt in Trigonometrie und Bewegungsberechnung sind, also bitte helft mir, bevor ich mir alle Haare ausgerissen hab.
