Kollisionsproblem...
Übersicht

![]() |
FlachzangeBetreff: Kollisionsproblem... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute!
Schon bissl länger her, dass ich mal hier war aber erst die Semesterferien ließen mir die Zeit, mal wieder die dicke Staubschicht von meiner Blitz-CD abzuwischen ![]() ![]() Folgendes: ich hab ein paar Fallschirmspringer, die vom Himmel zu Boden segeln. Aufgabe des Spielers ist es, sie mit Hilfe eines befestigten Geschützturmes vom Himmel zu pusten. Ich habe also ein Type für die Fallschirmspringer, sowie ein Type für die "Kanonenkugeln". Dreh- und Angelpunkt der ganzen Geschichte ist jetzt natürlich die Kollisionsabfrage, die prüft ob ein Fallschirmspringer von einer der Kugeln getroffen wurde. Die Routine sieht folgendermaßen aus: BlitzBasic: [AUSKLAPPEN]
Das funktioniert auch ganz prima. Der Fallschirmspringer wird getroffen und gelöscht - ebenso die Kugel. Allerdings funktioniert datt nur wenn gerade nur EINE Kugel durch den Himmel fliegt. Sollte sich irgendwo noch weitere Kugeln befinden quittiert das der Debugger mit einem Runtime-Error: "Object does not exist" Ich nehme also an, dass meine Schleifenstruktur irgendwie alle Kugel-Instanzen (shell.bullet) killt..? Aber wieso? Noch als Randnotiz: sobald eine Kugel die Bildschirmgrenze (800x600) erreicht, wird ihre Type-Instanz gelöscht. Könnte mir vielleicht jemand mit nem Gedankenanstoß helfen? Danke, Flachzange |
||
I'm no superman...! |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein das Problem ist das du Craft löscht, während du noch in der inneren schleife bist. Die restlichen Shells wollen dann natürlich auch auf die Kollision mit dem Craft überprüfen ... nur existiert dieses nicht mehr.
Es gibt zwei Möglichkeiten: 1. Du benützt, nachdem das Craft kollidiert ist, Exit nach den beiden Deletes um die noch verbleibenden Bullets nimmer zu überprüfen (wahrscheinlich die gewollte Reaktion) 2. Du setzt eine Variable auf true, die besagt, dass das aktuelle craft zerstört werden kann. Nach dem Next der Shell Loop überprüfst du dann ob die Variable true ist. Wenn ja zerstörst du das Craft und setzt die Variable wieder false und lässt die Loop mit dem nächsten Craft weitermachen. Ist umständlicher, sorgt aber dafür, dass alle Shells die mit dem Craft kollidiert wären bei diesem Check gelöscht werden, bevor das Craft zerstört wird. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Flachzange |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohhh Dreamora.... ![]() Danke...das war soo simpel.... vielen, vielen Dank! Wahrscheinlich hab ich mich schon zu lange mit diesem Codeschnipsel rumgeärgert und das wesentliche nicht mehr gesehn! ![]() Danke nochmal! |
||
I'm no superman...! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group