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

1

29.10.2009, 14:43

Wiedermal wegen Collision!

Hallo,

Ich hab wieder ein Problem bezüglich der Collision
undzwar geht es wieder um Pong, wenn ich die Collision
zu benutze wie man es mir geschrieben hat (Pixelperfecttest und Co.)
dann gibt es eine collision auch wenn der Paddel unten ist und
der Ball oben wo kein Paddel ist hinfliegt(Genau gleiche Position).
Ich hab den Ball verlangsamert um zu sehen wann die Collison
aufftritt die kamm erst wenn der ball durch den
Schäger ging also am letzen strich den paddels.
Außerdem funtkioniert nur die Collision wenn ich den Ball
in nähe des Paddels setze, wenn ich ihn in die Mitte lege
geht die Collisios prüfung garnicht.

Vorallem interessiert mich noch wie man nach
einer Collision z.B den Ball vom Bildschirm löschen kann.
Also das er nicht mehr gezeichnet wird.
Gibt es da schon was fertiges oder muss ich das selber
per Brain.exe machen?

Das alles in SFML.
- Ja, Sfml ist für mich noch ne neue welt,
mit der sdl war die Collisions erkennung leicher.
Vielen Dank schonmal im Voraus!

Gon

Treue Seele

Beiträge: 262

Wohnort: Nahe München

Beruf: Schüler (9. Klasse Gymnasium)

  • Private Nachricht senden

2

29.10.2009, 16:12

Also den ersten Teil hab ich nicht so ganz verstanden, zuerst sagst du, es gibt eine Kollision, auch wenn der Paddel (=Schläger?) ganz wo anders ist als der Ball, dann sagst du aber, dass die Kollision beim letzten Strich des Paddels auftritt, ich dachte aber, der Paddel ist ganz wo anders?
Und was meinst du mit der Nähe zum Paddel und dass der Ball nicht in der Mitte sein darf?

Das mit dem löschen kann man doch einfach mit einer bool-Variable lösen.
Du hast ja die Schleife, wo der Ball gezeichnet wird, wenn es nun eine Kollision gibt, ist die Variable (z.B. bCollision) auf true, dann wird die Schleife unterbrochen, z.B.

C-/C++-Quelltext

1
2
3
4
while (bCollision == false)
{ 
// Zeichnen

}


Aber der Ball muss doch nach einer Kollision wieder in die Mitte des Feldes, damit weitergespielt werden kann, oder meinst du am Ende der Runde?

Warum bist du überhaupt auf SFML umgestiegen, wenn du mit der SDL keine Probleme hattest und es sogar leichter war?

Brain.exe ist aber trotzdem nie falsch ;)

mfg Gon

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

29.10.2009, 16:30

Zitat von »"Genro"«

Gibt es da schon was fertiges oder muss ich das selber
per Brain.exe machen?


versuch so viel wie möglich selbst zu programmieren. nur so wirst du besser!

den ball kannst du dann löschen wenn er aus dem bild geflogen ist...

beispiel:

C-/C++-Quelltext

1
2
if(ball_X+ball_Radius < 0 || ball_X-ball_Radius > 800)
ball_loeschen();


bei seitlicher bewegung und einer einem spielfeld von 800pixeln breite.

4

29.10.2009, 20:10

Danke schonmal, also das mit der Collision meinte ich
so:

(Link)

*Der Blaue strich ist im Spiel nicht vorhanden, er soll nur zeigen
wann die Collision auftritt.

Erst am Ende (wo die Schläger Grafik zuender ist) wird in der Konsole "Collision" ausgegeben, bzw. tritt die Collision auf.
Und dann auch egal wo der Schläger ist. Wenn es am Ende
der Grafik des Paddels ist, dann ist es einfach eine Collision.

So siehts aus:

C-/C++-Quelltext

1
2
3
4
if ( Collision::PixelPerfectTest(Paddel, Ball) != false ) //Mit Circle Test und Co. hab ich es auch versucht,  ging aber leider dann auch nicht.

{
//...

}


Außerdem gibt es nur eine Collision wenn der Ball auch in der nähe
des Schlägers Positioniert wird. Ansonsten wenn der Ball zu weit
positioniert wurde gibt es gar keine Collision... :?

5

29.10.2009, 20:14

Du kannst es auch ganz einfach machen

wenn du die auflösung 800x600 hast:

C-/C++-Quelltext

1
2
3
4
if(PositionxBall >= 800)
{
       //Kolosion

}
Metal ist keine Musik sondern eine Religion.

Lerikson

Alter Hase

Beiträge: 412

Wohnort: nördlich von Hamburg

Beruf: Schüler

  • Private Nachricht senden

6

29.10.2009, 20:46

Also dein Problem scheint auf dem Bild folgendes zu sein:

Du vergleichst warscheinlich die beiden linken oberen Ecken der Bilder ( was bei deinem Schläger ja links oben ist) der Ball soll ja aber apprallen sobad er auf der rechten seite des schlägers ( dem auf dem Bild ) auftrifft, also musst du zu der eigentlichen X-Koordinate des Schlägers die Breite ( des schlägers )in Pixeln dazuaddieren

Als Beispiel:

Schläger X-Position: 10
Schläger Breite: 20

Ball X-Position: 30

dann schreibst du:

Wenn Ball X-Position <= ( kleinergleich ) Schläger X-Position + Schläger Breite: tue irgentwas

Ich hoffe ich konnte dir helfen,
mfg,
Lerikson
Errare est humanum. -Windows ist menschlich ;-)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

29.10.2009, 21:20

schreib die funktion, die die kollision kontrolliert, selbst.
das ist nicht sooo schwer, du lernst was dabei und es macht mehr spass.
voraussetzung ist, dass du den satz des pythagoras kennst und verstehst.

8

30.10.2009, 08:27

Nein, leider hatte ich noch nicht den Satz des Pythagoras. :?
Jedoch werde ich es jetzt einfach mal versuchen, was hab ich
schon zu verlieren. :D

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

9

30.10.2009, 09:30

http://de.wikipedia.org/wiki/Satz_des_Pythagoras

add mich in icq/msn ich erkläre ihn dir^^

adresse/nummer steht im profil

Lerikson

Alter Hase

Beiträge: 412

Wohnort: nördlich von Hamburg

Beruf: Schüler

  • Private Nachricht senden

10

30.10.2009, 15:24

ansonsten erklär ich ihn dir auch, allerdings sei hier mal gefragt wofür er den denn jetzt eigentlich bei der jetztigen Problematik braucht??
Errare est humanum. -Windows ist menschlich ;-)

Werbeanzeige