Fehler bei Imagescollide

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Travis

Betreff: Fehler bei Imagescollide

BeitragSo, Dez 21, 2003 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin zur Zeit an einem Asteroids-Clone am arbeiten und habe nun ein merkwürdiges Problem mit dem ImagesCollide-Befehl. Es gibt zwei verschiedene Sorten von Asteroiden (groß und klein). Für jeden Asteroiden gibt es für jeden Winkel ein Bild.

Code: [AUSKLAPPEN]

For Winkel = 0 To 359
 Asteroid(Winkel) = LoadImage ("Gfx\Ast1gr.bmp")
 MaskImage Asteroid(Winkel), 0, 0, 0
 RotateImage Asteroid(Winkel), Winkel
 MidHandle Asteroid(Winkel)

 Asteroid2(Winkel) = LoadImage ("Gfx\Ast2kl.bmp")
 MaskImage Asteroid2(Winkel), 0, 0, 0
 RotateImage Asteroid2(Winkel), Winkel
 MidHandle Asteroid2(Winkel)
Next


Wenn ich jetzt ein Schuß einen Asteroiden trifft wird die Bedingung auch erfüllt und der Asteroid explodiert. Ich habe aber nur eine Kollisionsabfrage für einen AsteroidenTyp

Code: [AUSKLAPPEN]

If ImagesCollide(Asteroid(a\Winkel), a\x, a\y, 0, Schuss(f\Winkel), f\x, f\y, 0) Then


Und trotzdem wird diese Bedingung auch für die anderen Asteroiden "Asteroid2(a\Winkel)" erfüllt. Das darf eigentlich nicht sein. Ich möchte nämlich für jeden Asteroidentyp eine eigene Explosion haben (wegen der Größe).
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Valio

BeitragSo, Dez 21, 2003 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Du scheinst deine Asteroiden in Types gespeichert zu haben. In diesen Types muss es doch auch ein Feld geben ob es sich um einen grossen oder einen kleinen Asteroiden handelt. Z.B.:Code: [AUSKLAPPEN]
Type TAsteroid
   Field Winkel
   Field Size ;0 = klein, 1= Gross
   Field x,y
End Type


Dann musst du für jeden Asteroid eine gesonderte Abfrage machen:Code: [AUSKLAPPEN]
For a.TAsteroid = Each TAsteroid
     If a\Size = 0
          If ImagesCollide(Asteroid(a\Winkel), a\x, a\y, 0, Schuss(f\Winkel), f\x, f\y, 0) Then Explosion_klein()
     Else
          If ImagesCollide(Asteroid2(a\Winkel), a\x, a\y, 0, Schuss(f\Winkel), f\x, f\y, 0) Then Explosion_gross()
     EndIf
Next
Programming today is a race between software engineers striving to build better and bigger idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook
Gegen TCPA || Stoppt RFID || Tux user #361946 || User posted image

Travis

BeitragSo, Dez 21, 2003 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den Tipp. Das hat geholfen! Very Happy

Ist aber trotzdem 'ne komische Sache. Immerhin sind Asteroid(n) und Asteroid2(n) ja zwei völlig unterschiedliche Bilder!
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Valio

BeitragSo, Dez 21, 2003 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
joa, schon. Aber das weiss BB ja nicht. Du zeichnest unterschiedliche Bilder, machst aber für alle Asteroiden die gleiche Kollisionsabfrage. Und da gibt's halt ein paar Überschneidungen...
Programming today is a race between software engineers striving to build better and bigger idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook
Gegen TCPA || Stoppt RFID || Tux user #361946 || User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group