2017-01-24 5 views
0

Ich arbeite gerade an einem Breakout-Spiel, und ich blieb bei einem Mathe-Problem stecken. Hier ist das Szenario.Basic Breakout Scaling Maths

Der Ball hat eine horizontale Geschwindigkeit, genannt bxspd. Der Ball hat eine X-Koordinate namens bx. Der Ball hat eine maximale Geschwindigkeit, genannt bspd. Der Schläger hat x Koordinaten, benannt px.

Wenn der Ball mit der Fledermaus kollidiert, muss er in horizontaler Richtung relativ zur Fledermausposition abprallen. Also mit anderen Worten:

// Kollisionsereignis bxspd = bx - px.

Auf diese Weise, wenn der Ball die linke Seite der Fledermaus trifft, springt der Ball nach links. Je weiter links von der Fledermausmitte, desto schneller wird die horizontale Geschwindigkeit nach links.

Das Problem mit diesem ist meine Fledermaus hat eine Breite von 50 auf jeder Seite von der Mitte. Wie skaliere ich das auf die maximale Geschwindigkeit des Balls? Mit anderen Worten, wenn es die äußerste linke Ecke der Fledermaus trifft, wird das bxspd zu -2 anstelle von -50?

Grüße, Claris

+0

Nachdem ich diese Frage geschrieben hatte, gelang es mir irgendwie, es herauszufinden. Der px-Ursprung ist der linke der Fledermaus, also habe ich die folgende Formel entwickelt: bdx = ((bx - (px + (p width/2)))/(p width/2)) * bspd; – NodziGames

+0

Fühlen Sie sich frei, die Frage zu löschen dann – mplungjan

+0

Vielen Dank für den Vorschlag mplungjan. Ich denke, es wäre profitabler, die Formel als eine Antwort auf die Frage zu schreiben, so dass die Leute sie als Referenz verwenden können, wenn sie die gleiche Frage haben. – NodziGames

Antwort

0

Nachdem wir die Frage geschrieben hatten, klickte etwas irgendwie an, also hier ist die Lösung für diejenigen, die es brauchen.

bdx = ((bx - (px + (Breite/2)))/(Breite/2)) * bspd;

bdx ist die xspeed des Balls. bx ist die xposition des Balls. px ist die xposition der Fledermaus. Breite ist die Fledermausbreite. bspd ist die maximale Geschwindigkeitsvariable des Balls, so dass der bdx relativ zur maximalen Ballgeschwindigkeit (bspd) berechnet wird.

Bitte beachten Sie, dass diese Formel auch mit einem Offset arbeitet. Grund dafür ist, dass das X des Spielers auf der linken Seite der Fledermaus ist. Um das Zentrum zu finden, fügen wir pwidth/2 zum x des Spielers hinzu, um das Zentrum zu finden.

+0

Haben Sie unabhängige Höchstgeschwindigkeiten für x und y? – fafl

+0

Ich hoffe, dass ich deine Frage nicht falsch interpretiere, aber hier geht es. bspd wird standardmäßig auf 2 gesetzt, wenn das Spiel startet. Diese Zahl begrenzt Ihre Ball xspeed auf 2, sowie die yspeed auf 2, nicht ihre kombinierte Geschwindigkeit. Lass es mich wissen, wenn ich die Frage missverstanden habe. – NodziGames

+0

Aber dann kann ein diagonal fliegender Ball mit einer Geschwindigkeit von 2,82 fliegen, fühlt sich das nicht komisch an? In meinem Verständnis sollte man die absolute Geschwindigkeit und nicht die x- und y-Achse unabhängig voneinander begrenzen. – fafl

0

Lasst uns sagen, wenn der Ball die äußeren rechten Rand der Schläger trifft, dann wird es eine zusätzliche Geschwindigkeit von extrabatspeed, in der Mitte zum 0 und auf der linken Seite wird es bekommt -extrabatspeed. Der Schläger hat eine Breite von batwidth und kollidiert mit dem Ball bei batcollisionx, mit einem Wert zwischen 0 und batwidth. Ich nehme an, die X-Achse geht von links nach rechts.

Dann können Sie die Änderung in ballspeedx als 2 * extrabatspeed * ballcollisionx/batwidth - extrabatspeed berechnen.

Bei Kollision ballspeedy wird negativ.

Die Capping-Geschwindigkeit sollte danach erfolgen. Berechnen Sie die Geschwindigkeit als sqrt(x^2 + y^2) und korrigieren Sie sowohl x als auch y um denselben Faktor.

+0

Danke für die Hilfe. Nachdem ich die Frage gestellt habe, habe ich eine Formel erstellt. Ihre Mathematik ist jedoch viel einfacher zu lesen, also werde ich es für das nächste Mal im Hinterkopf behalten. – NodziGames