Ich muss die Illusion erzeugen, dass jemand einen Ball auf den Bildschirm tritt. Dafür habe ich eine Anfangsposition des Balls (ungefähr in der Mitte des Bildschirms) und ich habe das Sprite des Balls auf 0,2 seiner ursprünglichen Größe skaliert. Dann generiere ich eine zufällige Position auf dem Bildschirm und bewege das Ball-Sprite dorthin. Gleichzeitig erhöhe ich die Skala des Balls, bis ich 1, die tatsächliche Größe, erreiche.
Zu diesem Zeitpunkt "traf" der Ball den Bildschirm. All dies funktioniert gut, aber die Skala des Balls ist nicht auf die Bewegung des Balls abgestimmt, und deshalb muss ich immer warten, bis die Skala Null erreicht, nachdem der Ball an seinem Ziel angekommen ist, oder ich muss Warten Sie, bis der Ball sein Ziel erreicht hat, nachdem der Ball bereits auf 1 skaliert wurde.
Die Frage ist, wie muss ich den Größenänderungsfaktor des Balls berechnen, damit er gleichzeitig zu 1 wird, wenn der Ball die gewünschten Koordinaten auf dem Bildschirm erreicht? Die Geschwindigkeit des Balls ist eine Zufallszahl zwischen einem bestimmten Bereich, und natürlich verwende ich nur 2D-Sprites.
Dies geschieht wahrscheinlich am besten durch Emulieren von 3D. Das Folgende ist 3D-Mathematik, die auf das für Ihren Fall erforderliche Minimum reduziert ist. Im Folgenden gehe ich davon aus, dass Sie ein
[initial scale]
und ein[final scale]
für den Ball definieren, je nachdem, wie groß / nah er erscheinen soll, zusammen mit den Start- und Endkoordinaten und der[time]
Dauer. Sie sollten auch eine[gravity]
Konstante definieren .Rahmen
Das
[ball scale]
sollte proportional zu sein1/[distance to screen]
, wo[distance to screen]
es linear mit der Zeit abnehmen sollte, es darf nicht 0 erreichen, sondern sollte bis zu dem Punkt abnehmen, an dem der Ball die gewünschte Größe hat.Es spielt keine Rolle, in welcher Einheit die Entfernung gemessen wird. Am einfachsten ist es also, einfach zu deklarieren
[initial distance]
, dass sie gleich1/[initial scale]
und ist[final distance] = 1/[final scale]
Position
Der Ball sollte sich auch auf dieselbe nichtlineare Weise über den Bildschirm bewegen, auf der er skaliert. Wenn Sie also berechnet haben
[ball scale]
, können Sie dies auch verwenden, um die Position zu ermittelnSchwere
Dadurch scheint sich der Ball in einer geraden Linie durch die Luft zu bewegen. Echte Bälle neigen dazu, dies aufgrund der Schwerkraft nicht zu tun. Abgesehen von sehr schnellen Schlägen würde es seltsam aussehen, wenn sich der Weg des Balls nicht nach unten biegt. Zuerst brauchen wir eine Parabel, die im Anfangs- und Endabstand zum Bildschirm durch 0 geht:
Dann sollte diese Parabel auf die gewünschte Schwerkraft skaliert werden, um langsamen Bällen eine größere Höhe zu verleihen:
Schließlich sollte die visuelle Darstellung dieser Höhe wie der Ball skaliert werden:
Die [visuelle Höhe] sollte dann zum vertikalen Teil der Bildschirmposition hinzugefügt werden. Abhängig von der Zeit und der Schwerkraftskala kann dies dazu führen, dass der Ball für einen Teil des Schusses vom Bildschirm verschwindet.
Zögern Sie nicht zu fragen, ob etwas nicht klar ist.
quelle