explosion darstellen

Anfängerfragen zum Programmieren mit PureBasic.
Special-Agent-J
Beiträge: 51
Registriert: 05.10.2008 10:13

explosion darstellen

Beitrag 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
Achtung ich hab leider nur die demo von 4.3 und von der kaufversion leider nur 3.3
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Beitrag 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:
(hab alles, kann alles, weiß alles!!^^)

Bild
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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"...
(\/) (°,,,°) (\/)
Antworten