Animation stoppt das Spiel ;-(

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Apprauuuu

Betreff: Animation stoppt das Spiel ;-(

BeitragMi, Mai 19, 2004 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute !
Ich hab ein kleines Problem...
Ich will es machen, dass wenn man ein gegnerisches Raumschiff abballert, ne Explosion kommt....
Ich hab die Animation für die Explosion in ner extra FUnction, aber das macht es irgendwie, dass der Rest des Spiels stehen bleibt, während die Explosion abläuft....

Hier mal ein paar Ausschnitte aus dem Code:

wenn man diesen gegner hier plättet
Zitat:
Function gegner1()
If leben_gegner(gegner_array) > 0 Then
x_gegner(gegner_array) = x_gegner(gegner_array) + 3
Else gegner_tot(gegner_array) = 1
explosion_function
x_gegner(gegner_array) = 2000
EndIf
End Function


soll diese Explosion hier kommen:

Zitat:
Function explosion_function()
explosion = LoadAnimImage("Bilder\Explosion\explosion1.bmp", 64, 100, 0, 9)

For explosion_animation = 0 To 8
DrawImage explosion, x_gegner(gegner_array), y_gegner(gegner_array), explosion_animation
Flip
Next



Kann mir vielleicht jemand helfen ??

Gossi

BeitragMi, Mai 19, 2004 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst in der Funktion nicht einfach explosion_function() aufrufen. klar dass das Programm dann steht. Statt dessen musst du dort eine globale Variable ändern (oder eine lokale zurückgeben), sodass die explosion LIVE in deiner Hauptschleife ablaufen kann! Also mit der Funktion nur die Animation AKTIVIEREN, aber nicht AUSFÜHREN!
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

BladeRunner

Moderator

BeitragMi, Mai 19, 2004 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Function explosion_function()
explosion = LoadAnimImage("Bilder\Explosion\explosion1.bmp", 64, 100, 0, 9)

For explosion_animation = 0 To 8
DrawImage explosion, x_gegner(gegner_array), y_gegner(gegner_array), explosion_animation
Flip
Next

betrachte das ganze aus der sicht deines Rechners:
wenn die Func zum Explodieren aufgerufen wird, macht er folgendes:
1. Bild laden (jedes mal... das kostet GraKaspeicher bis zum Erbrechen ->Auslagern)
2. Frame 1 der Animation malen
2a. mit Flip anzeigen
3. Frame 2 anzeigen...
etc...
Du siehst: dein Rechner führt stur deine Befehle aus- wo soll er denn was andres machen, du hälst ihn ja in der Schleife gefangen (und malst somit nur die explo, sonst nix).

Abhilfe schafft eine Variable welche die Framenummer beinhaltet. Lass diese dann alle xxx millisecs() um eins erhöhen und zeichne deine Explo so ohne Schleife.
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

Travis

BeitragMi, Mai 19, 2004 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich programmiere gerade was ähnliches, da geht es auch um Objekte, die explodieren.

Dabei bin ich folgendermaßen vorgegangen:

Ich habe eine Funktion, die eine neue Explosion erstellt und eine Funktion, die alle Explosionen aktualisiert.

Die Funktion Explosion() erstellt eine neue Explosion. Sie wird aufgerufen, wenn das Objekt explodieren soll. Dabei erhält die Explosion die Koordinaten des alten Objektes.

Code: [AUSKLAPPEN]

Function Explosion(x,y)
 e.explosion = new explosion
 e\x = x
 e\y = y
End Function


Die Funktion UpdateExplosion() dient zum Zeichnen der Explosion und zum löschen der Explosion, wenn sie vorüber ist.

Code: [AUSKLAPPEN]

Function UpdateExplosion()
 for e.explosion = each explosion
  drawimage ExplosionGfx, e\x, e\y, e\frame
  e\frame = e\frame + 1
  if e\frame = letztesbild+1 then delete e
 next
end function


In der Schleife sieht das etwa so aus:

Code: [AUSKLAPPEN]

Repeat
cls

 WENN Objekt zerstört DANN
  Explosion(ObjektX, ObjektY) ; Neue Explosion erstellen
  Delete Objekt                      ; Altes Objekt löschen
 ENDIF

 UpdateExplosion()                ; Alle Explosionen zeichnen, aktualisieren

flip
until keyhit(1)
end
www.funforge.org

Ich hasse WASD-Steuerung.

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

Markus2

BeitragMi, Mai 19, 2004 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@Apprauuuu

Denkst du auch nach wenn du was programmierst Confused

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group