2016-09-09 5 views
0

Ich bin auf ein bestimmtes Problem fest. Ich lerne, wie man ein sehr einfaches Spiel schafft, in dem ein Ball diagonal von der linken oberen Ecke eines Quadrats oder von einer rechteckigen bis zur rechten unteren Ecke in gerader Linie verläuft (wie in Fig. 1 gezeigt). Jetzt weiß ich, dass die x- und y-Position der Kugel beide Frame für Frame geändert werden müssen, aber ich bin unsicher, wie ich das anstellen soll.Verschieben eines Objekts diagonal in einem Quadrat

enter image description here

Mathe ist nicht meine Stärke und ich bin nicht sicher, wie ich die genaue Route berechnen, vor allem, da sowohl das Quadrat und Rechteck einen anderen Winkel haben. Gibt es irgendwelche mathematischen Formeln, die ich verwenden kann, um die diagonale Linie zu berechnen und um wie viel jede der x- und y-Koordinaten des Balls Bild für Bild angepasst werden muss.

Von der Forschung, die ich getan habe, denke ich, dass ich höchstwahrscheinlich den Winkel mit den sin oder cos Funktionen berechnen muss, aber ich bin nicht sicher, wie alles zusammenpasst. Habe https://www.mathsisfun.com/sine-cosine-tangent.html benutzt, um mehr zu versuchen und zu lernen.

Ich plane mit dem Code zu beginnen, aber würde wirklich Antworten auf diese grundlegenden Fragen schätzen. Ich versuche, sowohl die Programmierung als auch den mathematischen Aspekt zur gleichen Zeit zu lernen, und ich denke, dass dieser Ansatz die beste Lösung wäre.

Vielen Dank für Anregungen/Hilfe, ich würde es wirklich zu schätzen wissen.

Antwort

0

Da es rechteckig ist, berechnen Sie einfach die Steigung: Anstieg (Y)/Lauf (X). Dadurch erhalten Sie die Möglichkeit, die Position des Objekts in jeder Richtung pro Bild zu erhöhen. Abhängig davon, wie schnell oder langsam das Objekt bewegt werden soll, müssen Sie einen Modifikator darauf anwenden (wenn Sie das Objekt beispielsweise doppelt so schnell bewegen möchten, müssen Sie mehrere Male durch die Änderung in einem bestimmten Objekt multiplizieren . Richtung, bevor Sie tatsächlich die Position des Objekts ändern

0

Für Quadrat: Wenn Sie Rahmen oder JFrame verwenden, haben Sie mit Ihnen abstimmen

Sie Ball von links oben bewegen kann wie folgt nach rechts unten -> . Angenommen, Ihre obere linke Ecke befindet sich auf (0,0), addieren Sie 1 in beiden Koordinaten, bis Sie die rechte untere Ecke erreichen

U kann dies mit for-Schleife

tun
0

Sie benötigen den Winkel für dieses Mapping technisch nicht. Sie wissen, dass die Formel für eine Zeile "y = m * x + b" ist. Ich nehme an, dass Sie m, b berechnen können. Wenn nicht, lass es mich wissen.

Vorausgesetzt, dass - Sie können einfach x basierend auf alles, was Sie möchten (Timer, Event, etc.). Sie können Ihr inkrementiertes x in die obige Gleichung setzen, um Ihr jeweiliges y zu erhalten.

Nun, das wird nicht genug sein, da Sie Pixel statt tatsächliche Zahlen beschäftigen. Zum Beispiel, nehmen Sie an, dass in Ihrem Spiel x/y in Fuß sind. Sie müssen wissen, wie viele Pixel einen Fuß darstellen. Wenn Sie dann auf den Bildschirm zeichnen, passen Sie Ihre Koordinaten an, indem Sie sie durch Pixel pro Fuß dividieren.

So ... 1. Berechnen Sie Ihr M und B für Ihren Pfad. 2. Verwenden Sie einen Timer. Bei jedem Tick, passen Sie die x-Wert 3. Verwenden Sie Ihre x-Wert Ihre y-Wert 4. Teilen Sie x und y durch eine Skalierung Nummer 5. Verwenden Sie die neue skaliert x und y berechnen Ihr Objekt

Jetzt plotten ...Es gibt alle Arten von Tricks, die Sie mit der Mathematik spielen können, aber das sollte Sie beginnen.

0

Lassen Sie uns linken unteren Ecke des Rechtecks ​​(oder Quadrat) hat Koordinaten (x0, y0), und die rechte obere Ecke (x1, y1). Dann hat diagonal Gleichung

X(t) = x0 + t * (x1 - x0) 
Y(t) = y0 + t * (y1 - y0) 

wo t Parameter sind im Bereich 0..1. Punkt bei t=0 entspricht (x0, y0), bei t=1 bis (x1, y1), und bei t=0.5 - in der Mitte des Rechtecks. Alles, was Sie brauchen, ist den Parameter t zu variieren und die Position zu berechnen. Wenn sich Ihr Objekt mit konstanter absoluter Geschwindigkeit in eine beliebige Richtung bewegt, verwenden Sie die horizontalen und vertikalen Komponenten der Geschwindigkeit vx und vy. Zu jedem Zeitpunkt erhalten Sie Koordinaten wie x_new = x_old + delta_time * vx. Beachten Sie, dass die Reflexion von der vertikalen Kante nur die horizontale Komponente der Geschwindigkeit 'vx = - vx' und so weiter ändert.

Verwandte Themen