Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

1

25.04.2013, 01:01

Ball an Gelände per Tastendruck kleben[Box2D]

Hallo allerseits,
da ich mich gerade wieder mit meinem Spiel beschäftige, ist mir die Idee aufgekommen ein neues Gameplay Element hinzuzufügen.
Und zwar möchte ich, dass man per Tastendruck, für ein paar Sekunden einen Ball auf einem Gelände festkleben kann, damit er z.b. bei Steigungen nicht in die Höhe ODER Tiefe fliegen/fallen kann.
Der Ball soll aber trotz dem Festkleben rollbar sein. Er soll halt nur nicht mehr vom Boden/Untergrund/Gelände abheben/runterfallen.
Hat einer da eine Idee wie ich das mit Box2D umsetzen könnte? Jeder gute Gedanke/Ansatz wäre mir sehr hilfreich.
Habe schon mit entgegengesätzen Kräften auf das Gelände probiert, aber in meinem Spiel gibt es auch Steile Abhänge bei denen der Ball auch noch festkleben soll...
Wer sich das ganze nicht vorstellen kann, hier ein Beispiel:
http://www.youtube.com/watch?v=-svDj3_RneU

(Linesurfer IPhone App)

Und hier noch ein Beispiel Bild:


(Link)


Ohne den Effekt würde hier der Ball ganz einfach nach unten fallen.

Danke im voraus! :)
New Project: Operation CityRacer

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

25.04.2013, 06:46

Das ist ein semantisches Problem. Was ist denn z.B. wenn das Rad bereits (weil der Spieler die Taste nicht gedrückt hat) zwischen die beiden Gelände-Stücke gefallen ist und er dann die Taste drückt? Was genau soll dann passieren?

Ein Vorschlag wäre, dass du die Gravity von Box2D temporär so änderst, dass sie auf das nächst gelegene Gelände hin zeigt. Wenn der Ball dann "nahe" am Gelände ist, könnte man sie so ändern, dass die Gravitations-Richtung der umgekehrten Normale der aktuellen Polygon-Kante entspricht, der das Rad am nächsten ist. Das könnte natürlich dazu führen, dass (je nach fraction) das Rad beim Aufprall abspringt. Ich weiß nicht, ob man da die fraction des Rads temporär auf 0 setzen könnte (also ich weiß nicht, ob man das bei Box2D ändern kann/darf). Außerdem würde dieser Ansatz einen bereits beschleunigt fliegenden Ball nur bedingt wirklich bis zum Gelände ziehen können. Wenn er zu schnell ist, würde der Ball eher eine Umdrehung um das Gelände machen wie ein Satellit um einen Planeten.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

3

25.04.2013, 12:00

Zitat

Das ist ein semantisches Problem. Was ist denn z.B. wenn das Rad bereits (weil der Spieler die Taste nicht gedrückt hat) zwischen die beiden Gelände-Stücke gefallen ist und er dann die Taste drückt? Was genau soll dann passieren?
Solange er nicht mit den Terrain kollidiert ist, soll nichts passieren wenn man die Taste drückt. Es soll dann alles wie beim Alten bleiben.

Genau mit dem Ansatz, den du Vorgeschlagen hast, hab ich das Bild von meinem Spiel geschossen. Der Ansatz war anfangs sehr erfolgreich, aber dann hab ich gemerkt dass ich ja auch noch andere Dynamische Objekte in der Welt habe, die dann ungewollt mit beeinflusst werden. Und ein weiteres Problem war das "mit dem Satelliten um einen Planeten" Problem, wie du ja schon erwähnt hast...
ich hätte noch an distance Joints gedacht, die bei jeder Kollision mit dem Gelände neu berechnet werden...aber glaube das würde auch nicht funktionieren.
New Project: Operation CityRacer

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

25.04.2013, 12:19

Solange er nicht mit den Terrain kollidiert ist, soll nichts passieren wenn man die Taste drückt. Es soll dann alles wie beim Alten bleiben.
Das heißt es bleibt also nicht kleben, wenn das Rad minimal Abstand zum Gelände hat? Das dürfte nämlich durch die Box2D-Simulation selbst sehr schnell passieren.
Genau mit dem Ansatz, den du Vorgeschlagen hast, hab ich das Bild von meinem Spiel geschossen. Der Ansatz war anfangs sehr erfolgreich, aber dann hab ich gemerkt dass ich ja auch noch andere Dynamische Objekte in der Welt habe, die dann ungewollt mit beeinflusst werden. Und ein weiteres Problem war das "mit dem Satelliten um einen Planeten" Problem, wie du ja schon erwähnt hast...
Hmm, ja, andere dynamische Objekte stellen dann ein Problem dar.
Und wie ist es, wenn Du nicht die Gravity änderst, sondern eine Cancelling-Force entgegen der Gravity auf das Rad einwirken lässt und dann zusätzlich noch eine in Richtung Deines Geländes?
Also quasi das hier vor jedem word->step():

Quellcode

1
2
body->ApplyForce( body->GetMass() * -world->GetGravity(), body->GetWorldCenter() );
body->ApplyForce( body->GetMass() * direction, body->GetWorldCenter() );

(Basis-Idee zur Auslöschung der Gravitation aus http://www.iforce2d.net/b2dtut/custom-gravity)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

5

25.04.2013, 17:05

Sowas ist mir noch gar nicht in den Sinn gekommen :D
Danke, werd ich gleich mal nachher ausprobieren!


Zitat

Das heißt es bleibt also nicht kleben, wenn das Rad minimal Abstand zum Gelände hat? Das dürfte nämlich durch die Box2D-Simulation selbst sehr schnell passieren.
darüber hab ich mir noch nicht so ernsthaft Gedanken gemacht, aber ich würde da einfach nen etwas größeren Sensor als die Größe des Balls drüber legen und dann kann man ja auch kleine/minimale Abstände erkennen, damit das Rad auch noch kleben bleibt.
New Project: Operation CityRacer

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

6

25.04.2013, 18:54

Okey, erfolgreich getestet, ABER naja das Problem, dass der Ball wie ein Satellit um das Gelände kreist und immer schneller wird (Gelände im Beispiel Bild) besteht jetzt leider noch und deswegen ist dann wohl der Ansatz unbrauchbar... schade, vielleicht hat noch jemand ne Idee :)
Vielleicht irgendwie ne Verbindung mit Joints oder so, naja ich mach mir auch nochmal Gedanken
New Project: Operation CityRacer

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Nexxtron« (25.04.2013, 18:59)


BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

7

26.04.2013, 00:33

Okey, erfolgreich getestet, ABER naja das Problem, dass der Ball wie ein Satellit um das Gelände kreist und immer schneller wird (Gelände im Beispiel Bild) besteht jetzt leider noch und deswegen ist dann wohl der Ansatz unbrauchbar... schade, vielleicht hat noch jemand ne Idee :)


Sollte sich das Problem nicht beheben lassen, indem du die Gravitation extrem erhöhst (die Reibung mit dem Boden jedoch nicht)?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

26.04.2013, 07:08

Wahlweise durch lineares Damping der Velocity.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

9

26.04.2013, 17:19






Zitat von »Nexxtron«



Okey, erfolgreich getestet, ABER naja das Problem, dass der Ball wie ein Satellit um das Gelände kreist und immer schneller wird (Gelände im Beispiel Bild) besteht jetzt leider noch und deswegen ist dann wohl der Ansatz unbrauchbar... schade, vielleicht hat noch jemand ne Idee


Sollte sich das Problem nicht beheben lassen, indem du die Gravitation extrem erhöhst (die Reibung mit dem Boden jedoch nicht)?
hab ich probiert, dabei wird der Satelliteneffekt nur noch stärker


ABER es funktioniert jetzt einigermaßen mit LinearDamping, zwar nicht ganz der gewünschte Effekt, aber ist schonmal richtig gut. (muss jetzt noch ein bisschen an den Werten rumspielen)
Fettes Danke an BlueCobold
New Project: Operation CityRacer

Werbeanzeige