Hi @all,

kommt selten vor, dass ich eine Tech-Frage stelle ich weiß xD Aber die Lage ist ernst...

Also. Ich entwickle gerade ein kleines Shooter-Script. Dabei beherrscht der Held eine Art "Spezialangriff", bei dem die Zeit einfriert. Dann erscheint an einer zufälligen Position nahe bei einem Gegner ein Zielfadenkreuz (per Pic), welches sich auf den Gegner zu bewegt. Sobald es sich über dem Gegner befindet, wird es rot (hier muss der Spieler Enter drücken um zu treffen) und sobald es wieder weiter weg vom Gegner ist, erhält es wieder seine normale Farbe (sobald es den Zielpunkt erreicht, gilt der Schuss automatisch als "verfehlt"). Der Start- und Endpunkt der Animation bilden eine Strecke, in deren exakter Mitte sich der Gegner befindet. Da die Startposition des Fadenkreuzes ein Zufallswert ist, wird die eigentliche "Zielposition" des Pics per Vektorrechnung berechnet:

Ziel.X = Gegner.X + (Gegner.X - Ausgangspunkt.X)
Ziel.Y = Gegner.Y + (Gegner.Y - Ausgangspunkt.Y)

Wie ihr anhand des Anfangstextes schon lesen konntet, muss erstens der Spieler jederzeit dazu in der Lage sein, den Vorgang per ENTER zu unterbrechen (--> Trefferabfrage) und zweitens muss das Pic seine Farbe auf Rot und wieder zurück wechseln können. Das hier geht also NICHT

<>Show Pic (1, Start.X, Start.Y)
<>Move Pic (1, Ziel.X, Ziel.Y, 1.0s)

Stattdessen wird die Strecke "zerstückelt" in Teilstücke von jeweils 0.1 Sekunden. Nehmen wir an, die Gesamtdauer der Pic-Bewegung von Anfang bis Ende dauert 2 Sekunden. Das bedeutet, dass wir 20 Teilstrecken zu jeweils 0.1 Sekunden haben. Rechnerisch bedeutet das, dass wir herausfinden müssen, wie die Pic-Position nach jeweils 0.1 Sekunden aussieht. Das geht so:

Differenz_X = (Endpunkt.X - Anfangspunkt.X) / 20
Differenz_Y = (Endpunkt.Y - Anfangspunkt.Y) / 20

Momentane_Pic_Pos.X = Anfangspunkt.X + (time) * Differenz_X
Momentane_Pic_Pos.Y = Anfangspunkt.Y + (time) * Differenz_Y

... wobei (time) für die Anzahl von durchgeführten Move-Pictures steht, beginnend bei 1.


So weit, so gut. Jetzt das (im Endeffekt simple) PROBLEM:

Differenz_X = (Endpunkt.X - Anfangspunkt.X) / 20
Differenz_Y = (Endpunkt.Y - Anfangspunkt.Y) / 20

... ergibt KOMMAZAHLEN. Der Maker rundet die natürlich und das Pic landet an einem anderen Zielpunkt als mit dieser Formel vorausberechnet:

Zielpunkt.X = Anfangspunkt.X + (Gegner.X - Anfangspunkt.X)*2
Zielpunkt.Y = Anfangspunkt.Y + (Gegner.Y - Anfangspunkt.Y)*2

Das wäre aber für mein Script absolut unabdingbar. Irgendwelche Vorschläge? Cherry vielleicht was Passendes bei der Hand? xD


Greetz!



Alan