ImagesOverlap, trotz Löschung des Objektes

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Trunxx

Betreff: ImagesOverlap, trotz Löschung des Objektes

BeitragDo, Sep 09, 2004 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Ich prüfe ob einer der Aliens mit meinem Raumschiff zusammenstösst.
Bei jedem Zusammenstoss möchte ich "energie = energie - 1", allerdings wird nicht nur 1 abgezogen sondern immer 15 bis 30.
So als ob der Alien mit dem schiff zusammenstösst nicht gleich gelöscht wird.
Kann es damit zusammenhängen, dass ich bei der Explosion ein Animiertes Image habe und mein schiff nach dem Alien noch weiter mit dem Animieren Image kollidiert und deshalb bei energie 15 bis 30 abgezogen wird?
Hier der Code der Alien Explosion: (aus dem Buch von Rene Meyer)
Code: [AUSKLAPPEN]

;Explosion Alien zeichnen
For I=1 To 5
   If Alien(I,0) = -1 Then
      If AlienExplodiert(I,1) + 100 < MilliSecs() Then
         AlienExplodiert(I,0) = AlienExplodiert(I,0) + 1
         AlienExplodiert(I,1) = MilliSecs()
         
      If AlienExplodiert(I,0) = 6 Then
         AlienExplodiert(I,0) = 0
         AlienExplodiert(I,1) = 0
         Alien(I,0) = 0
      EndIf
   EndIf
   DrawImage explosion, Alien(I,1), Alien(I,2), AlienExplodiert(I,0)
EndIf
Next




Und hier der Code der Kollisionsabfrage von Alien und Raumschiff:
Code: [AUSKLAPPEN]

For I=1 To 100
   If Rak(I,0) <> o Then
      For J=1 To 5
         If ImagesOverlap(alienbild, Alien(J,1), Alien(J,2), schiff, X,Y) Then
            PlaySound(trefferton)
            Alien(J,0) = -1
            energie = energie - 1
          EndIf
        Next
    EndIf
Next



Grüsse
Very Happy

Shogo

BeitragDo, Sep 09, 2004 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuche es mal so. Müßte eigentlich funzen.

Code: [AUSKLAPPEN]

For I=1 To 100
   If Rak(I,0) <> o Then
      For J=1 To 5
         If ImagesOverlap(alienbild, Alien(J,1), Alien(J,2), schiff, X,Y) and Alien(J,0) <> -1 Then
            PlaySound(trefferton)
            Alien(J,0) = -1
            energie = energie - 1
          EndIf
        Next
    EndIf
Next
 

Trunxx

BeitragFr, Sep 10, 2004 0:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, hat wunderbar funktioniert.
Jetzt gibt es allerdings genau das gleiche Problem wenn ich zählen möchte, wieviele Aliens der Spieler verpasst hat -> wie viele den unteren Bildschirmrand passiert haben.

Hier mein Code:
Code: [AUSKLAPPEN]

For J=1 To 5
   If Alien(J,2) > 760 Then
      verfehlt = verfehlt + 1
   EndIf
Next


An was liegt das eigentlich? Dann könnte ich diese Probleme in Zukunft selbst lösen Smile
 

Blitzkrieg Bop

BeitragFr, Sep 10, 2004 8:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich würde es mit dem Befehl Exit klären.
Benutzt du Exit, wird sofort ans Ende der Schleife gesprungen und dementsprechend nur eine Zahl zu einer Variablen addiert, oder subtrahiert - je nachdem.
Code: [AUSKLAPPEN]

...
verfehlt = verfehlt + 1
exit
...
~ Hey Ho Let's Go ~
 

Gerhard

BeitragFr, Sep 10, 2004 8:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Das liegt daran, dass dein Alien wahrscheinlich nicht gelöscht wird, sondern noch weiterfliegt (die Bedingung > 760 ist also eine ganze Zeit lang erfüllt).

Deine Lösung klappt nur, wenn du dein Alien bei > 760 zugleich auch löschst oder wieder auf 1 setzt. Nur dann zählst du dein Alien nur einmal.
 

Skullspliter

BeitragFr, Sep 10, 2004 9:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder viel simpler: das Alien muss nicht >760 sein sondern genau =760
Dann wird es ja auch nur einmal gewertet Mr. Green

BladeRunner

Moderator

BeitragFr, Sep 10, 2004 9:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde auf >760 prüfen und dann löschen.... falls du später mal die Geschwindigkeit der Feindschiffe erhöhst könnte es sonst zu Fehlern kommen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Shogo

BeitragSa, Sep 11, 2004 0:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Liegt wahrscheinlich daran das du die position der schiffe auch noch veränderst wenn sie schon getroffen sind.

Würde es wieder so machen

Code: [AUSKLAPPEN]

For J=1 To 5
   If Alien(J,2) > 760 and Alien(J,0) = 1 Then Then
      verfehlt = verfehlt + 1
   EndIf
Next


So werden nur die Schiffe gezählt die noch nicht zerstört sind.

Oder setze:

Code: [AUSKLAPPEN]

and Alien(J,0) = 1


in deine Function zum bewegen der Schiffe. So das sich nur noch die Schiffe bewegen die nicht zerstört sind.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group