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

Schnitter

Treue Seele

  • »Schnitter« ist der Autor dieses Themas

Beiträge: 141

Wohnort: Remshalden

Beruf: Schüler

  • Private Nachricht senden

1

01.05.2007, 20:14

Kollisionsabfrage zickt...

So, ich mal wieder :D

Ich habe das Spiel jetzt weitestgehend fertig und bin auch schon beim erweitern.

Ich hab probeweise einfach mal alles relativ zur Auflösung umgecodet, was auch funktioniert.
Ich spiele jetzt mit 1600x1200 und Farbtiefe von 32.
Jetzt das Problem: die Kollisionsabfrage mit den Asteroiden zickt teilweise.
Sie geht zwar manchmal, aber es passiert auch, dass man einen Asteroiden einfach nicht kleinkriegt. Ich weiß nicht warum, hab die Zeilt:

C-/C++-Quelltext

1
2
3
4
5
            if(rectShot.y < rectAsteroid.y + rectAsteroid.h     &&
               rectShot.y + rectShot.h      > rectAsteroid.y    &&
               rectShot.x < rectAsteroid.x  + rectAsteroid.w    &&
               rectShot.x + rectShot.w      > rectAsteroid.x    )
            {

Auch schon mehrfach durchgelesen und verglichen(hatte Anfangs einen Fehler drin), aber die ist soweit ich das sehe richtig.

Hat jemand etwas "besseres" auf Lager, oder weiß jemand, an was es liegen könnte? Oder: ist der Fehler schonmal aufgetreten?


MfG

Lares

1x Contest-Sieger

  • Private Nachricht senden

2

02.05.2007, 14:34

Naja bei meinen eigenen Spiel (nicht das aus dem Buch) war die Kollision mit Tiles etwas...ungenau xD. Bei mir war das Problem, dass das Rect der Tiles irgendwie doppelt so groß war wie es sein sollte. Kannst das ja in der Hinsicht mal überprüfen.


Wäre auf jedenfall hilfreich wenn du das "Zicken" besser beschreiben könntest. ;)

Frede

Treue Seele

Beiträge: 259

Wohnort: Hameln

Beruf: Schüler

  • Private Nachricht senden

3

02.05.2007, 14:41

Eigentlich sollte deine Abfrag so funktionieren wie sie sollte...
Setz aber mal zur Sicherheit lieber auf das hier:

C-/C++-Quelltext

1
2
3
4
if(rectShot.y <= rectAsteroid.y + rectAsteroid.h && 
   rectShot.y  + rectShot.h >= rectAsteroid.y && 
   rectShot.x <= rectAsteroid.x + rectAsteroid.w && 
   rectShot.x  + rectShot.w >= rectAsteroid.x)

Das hat mir bei einem änhlichen Problem seehr geholfen :)

mfg frede
Hier könnte ihre Werbung stehen.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

02.05.2007, 14:42

Im Zweifelsfalle: Debuggen. Da kannst du manuell die Werte vergleichen und man sieht die meisten Logikfehler sehr schnell. Wenn du nicht weißt wie man debuggt, einfach nochmal nachfragen oder Suche bemühen :)


(haben wir eigentlich so eine Art Debug-Tut, was man in so einem Fall einfach erlinken könnte?)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Schnitter

Treue Seele

  • »Schnitter« ist der Autor dieses Themas

Beiträge: 141

Wohnort: Remshalden

Beruf: Schüler

  • Private Nachricht senden

5

02.05.2007, 16:12

Ich finde es zwar komisch, dass ich mit dem Win-Shortcut einen screen machen kann, aber:
http://img475.imageshack.us/my.php?image=muhmc1.jpg

Wie ihr seht, lebt der Asteroid immernoch :(

Nach einer Zeit geht es einfach ncihtmehr und ich kann Asteroiden nur noch abschießen, wenn sie direkt auf meinem Raumschiff drauf sind.

Schnitter

Treue Seele

  • »Schnitter« ist der Autor dieses Themas

Beiträge: 141

Wohnort: Remshalden

Beruf: Schüler

  • Private Nachricht senden

6

02.05.2007, 21:02

Mal eine andere Frage:

Wieso geht das:

C-/C++-Quelltext

1
2
3
4
m_pPlayer->getSprite()->getRect().y < rectAsteroid.y+rectAsteroid.h &&
         m_pPlayer->getSprite()->getRect().y + m_pPlayer->getSprite()->getRect().h > rectAsteroid.y &&
         m_pPlayer->getSprite()->getRect().x < rectAsteroid.x + rectAsteroid.w &&
         m_pPlayer->getSprite()->getRect().x + m_pPlayer->getSprite()->getRect().w > rectAsteroid.x)

Nicht?
Mal davon abgesehen, dass ich die Kollisioinsabfrage noch nie wirklich verstanden habe(werd mich morgen mal nochmal dransetzen), geht das einfach nciht :(
Es soll einfach prüfen, ob der Spieler von einem Asteroiden getroffen wird und wenn ja, den Asteroiden "töten"(Den Teil sieht man hier nichtmehr).

denjo

Treue Seele

Beiträge: 163

Wohnort: BLB

  • Private Nachricht senden

7

03.05.2007, 14:36

Wir hatten schonmal einen Thread, indem das gefragt wurde...Klick hier

Diese Lösung funktioniert wunderbar!

mfg denjo
"Irren ist menschlich, Vergeben göttlich."
- Alexander Pope -

Werbeanzeige