[Gelöst] SDL 2D Kollisionsabfrage bei bewegten Bild


LecramOS

Member
Joined
Feb 20, 2010
Messages
121
Age
39
Location
Pandora.
LOCATION
Pandora.
Hallo baldige Pandorianer :-D
Grüße Euch und wünsche einen schönen Tag oder eine
gute Nacht je nachdem wann Ihr/Du gerade dies hier ließt.

Ich habe den Sprung zu Linux gewagt(Ubuntu) und habe bis
jetzt nichts zu nörgeln und bin mit der IDE Code::Blocks voll zufrieden.

SDL bin ich am lernen und habe Allegro den Rücken zugewendet.
Ist ein bisschen schwerer als Allegro aber ich bin mittlerweile an der
gleichen Stelle mit SDL angelangt wo ich bei Allegro aufgehört hatte
und damit auch bei den gleichen Problemchen .

Ich bin dabei erst mal ein Pong Spiel entwerfen.
Die Kollisionsabfrage (an allen Seiten des Rechtecks) funktioniert gut
solange sich der (Spieler)==Paddel und Ball nicht gleichzeitig entgegenkommen.

Ich habe zu Testzwecken den Spieler noch nicht auf der X-Achse fixiert um zu
gucken wie sich das verhält wenn der Ball sich zum Spieler hinbewegt und der
Spieler sich zum Ball hinbewegt(also beide sich entgegenkommen) wie bei einen
Fahrzeugcrash wo das eine Auto den anderen nicht ausweicht .

Das ulkige(Problem) hier ist jedoch, dass Ball und Spieler sich nichts tun.
Es herrscht keine Kollisionsabfrage obwohl die Kollisionsabfrage geschrieben ist
und sie auch, wenn sich beide Parteien nicht "entgegen" kommen, funktioniert.

Wenn also der Spieler auf seiner X-Achse fixiert wäre, wie es bei einen Pong Spiel
üblich ist, würde dieses Problem nicht existieren. Ich sagte aber vorhin, dass ich
den Spieler nur aus Testzwecken von seiner X-Achse gelöst habe weil ich diesen
Problem auf die Spur gehen wollte.Nach dem fixieren bewegt sich der Spieler aber noch auf der
Y-Achse und da tritt nämlich dann das gleiche Phänomen auf, dass keine Kollisions-
abfrage herrscht, aber diesmal natürlich nur an den kürzeren Seiten des Spielers
weil er sich ja nur noch nach unten und oben bewegen kann.

Ich möchte, dass man den Ball auch mit den Seiten weg schlagen kann.

Ich füge unten ein Bild und den Quellcode an.

Nun habe ich was gelesen von Pixelgenauer Abfrage und wollte wissen, ob das die
einzige Möglichkeit ist dieses Problem zu lösen ? Ich denke mal nein, weil z.m.b.
"Street Fighter 2 Turbo" auch keine benutzt und sich da auch zwei Bilder entgegenkommen
bei diesen Kampf Spiel.

Über eine Lösung und eigene Erfahrungen von Euch/Dir zu diesem Thema "2D Spieleentwicklung"
wäre ich echt dankbar, denn ich versuche und versuche jetzt schon knapp 3 Tage an dieser
Stelle weiter zu kommen.

Biss Dann :)

textbild2.png



Quell code : http://pastie.org/860452 RTFM
 
Re: SDL 2D Spieleentwicklung Kollisionsabfrage bei bewegten Bild

<r>Also ich kenn mich mit SDL ja nicht aus und hab mir den Code auch nur 2 min angeschaut (muss jetzt ins Bett <E>:D</E> ) aber ich haette eine Idee:<br/>
<br/>
Kann es denn sein das, wenn die Objekte sich aufeinander zubewegen, die Positionsvariablen von Ball und Spieler quasi gleichzeitig hochgezaehlt werden und sich dadurch nichtmehr ueberschneiden ??<br/>
Ich wuerde einfach mal probieren den Bereich und nicht nur die Kande des Spielerobjekts abzufragen.<br/>
<br/>
Also wuerde ich mal:
<QUOTE><s>
</s>if(xBall == (xSpieler+SPIELER_WEITE) && yBall < (ySpieler + SPIELER_HOEHE) && yBall > ySpieler) {<br/>
cout << "Kontakt\n" ;<br/>
txBall *= -1 ;<br/>
}<br/>
;<e>
</e></QUOTE>

zu irgend sowas abaendern:
<QUOTE><s>
</s>if(xBall <= (xSpieler+SPIELER_WEITE) && yBall < (ySpieler + SPIELER_HOEHE) && yBall > ySpieler) {<br/>
cout << "Kontakt\n" ;<br/>
txBall *= -1 ;<br/>
}<br/>
;<e>
</e></QUOTE>

Probiers einfach mal aus <E>;)</E> Ich hoffe es kommt rueber was ich meine <E>:confused:??</E></r>
 
Re: SDL 2D Spieleentwicklung Kollisionsabfrage bei bewegten Bild

<r>DANKE <E>^_^</E> <br/>
<br/>
Das war es. <br/>
Dann bei dem "Kontakt" noch mit +=2 inkrementieren und es klappt. <E>:-D</E> <br/>
<br/>
Da wäre ich nicht drauf gekommen, egal wie lang ich mir den Code angesehen hätte.<br/>
Habe da im total falschen Gebiet gedacht. <E>:-D</E> <br/>
<br/>
Vielen Dank.. <E>:wub:</E> <br/>
<br/>
Biss dann. <E>;)</E></r>
 
Back
Top