Seite 1 von 1

explosion darstellen

Verfasst: 10.06.2009 16:21
von Special-Agent-J
hallo
hab ein problem und zwar hab ich mal ein kleines spiel programiert und wenn ich jetzt eine explosion darstellen möchte
hab ich das hier gemacht

Code: Alles auswählen

If SpriteCollision(3,koords,ry,1,400,200) Or ry<1
For expo1=4 To 7
DisplaySprite(expo1,koords,ry)
Next 
ry=-2
allerdings tritt das problem auf das die explosion viel zu schnell abläuft also kaum sichtbar ist, also kann man irgendwie die for schleife langsamer laufen lassen oder muss man das ganz anders lösen?
schon mal im voraus danke für die hilfe

Verfasst: 10.06.2009 17:09
von man-in-black
Naja, es ist nicht gerade sinnvoll alle Bilder aufeinander zu zeichnen.

ich hab das bisher so verstanden:

Code: Alles auswählen

Repeat
 clearscreen($000000)
  
   ;irgend welche schiffe malen,...

   ;Collision abfragen, wenn positiv die Explosion zeichnen

 Flipbuffers()


forever
Wenn du es aber so machst, stapelst du die Bilder der Explosion übereinander. Außerdem wird die Explosion dann wahrscheinlich nur einmal angezeigt, d.h. sie ist nur einen Schleifendurchlauf lang sichtbar.

Besser wäre, wenn du nach der Kollisionsüberprüfung eine Variable füllst, die nur bei einer Kollision einen Wert ungleich null beinhaltet.

dann könntest du bei einem neuen Schleifendurchlauf überprüfen, ob eine Explosion gezeichnet werden muss.
z.B.:

Code: Alles auswählen

Repeat
 ClearScreen(...)

  if Explosion > 0
    displaysprite(#Explosion_Bild,explosionx,explosiony)
  endif

    ...
   
   if Kollision(...)
     Explosion = 1
      explosionx = koords
      explosiony = ry
   endif
um dann eine bestimmte zeit zwischen die einzelnen Animationsbilder zu setzen, musst du eine weitere Variable mit der aktuellen zeit füllen:

Code: Alles auswählen

   if Kollision(...)
     Explosion = 1
      explosionx = koords
      explosiony = ry
     aktuelle_Zeit = elapsedmilliseconds()
   endif
und so weiter ... und so weiter
dann erhältst du zum schluss in etwa das:

Code: Alles auswählen

Repeat
 ClearScreen(...)

  if Explosion > 0
    displaysprite(Explosion,explosionx,explosiony)
  endif

    ...
   
   if Kollision(...)
     Explosion = 1 
      explosionx = koords
      explosiony = ry
       aktuelle_Zeit = elapsedmilliseconds()
   endif

   if aktuelle_Zeit  + Zeit_zwischen_den_Bildern  < elapsedmilliseconds()
    if Explosion < 7      
       Explosion + 1
    else 
       Explosion = 0
    endif
   endif
ABER, dieser Code kann gleichzeitig nur EINE Explosion zeigen, kommt eine neue dazu, wird diese angezeigt und die alte verschwindet sofort. Wenn du mehrere Explosionen zur selben Zeit hast, musst du mit Listen arbeiten!!!!!

Im letzten Beispiel ist die Variable "Explosion" zum einen der Auslöser für die Darstellung, aber AUCH die Spritenummer!!!!
Dementsprechend musst du die SpriteID anpassen!!

mit der Variable "Zeit_zwischen_den_Bildern" steuerst du die Dauer der Animation (in ms!!)

Viel Spassss :allright:

Verfasst: 10.06.2009 17:13
von KeyKon
Ja, ich frag mich wie dein bisheriger Spielcode aussieht wenn du versuchst so eine Bildfolge anzuzeigen...

Ich empfehle dir mal auch den Beispielcode von WeaponezII der bei PB dabei is anzuschauen, da wird nämlich genau sowas abgehandelt, sogar "Massentauglich"...