explosion

Previous topic - Next topic

Naish

Tach, habe schon das forum durchstöbert, aber nichts für mich brauchbares gefunden.
Bitte nicht erwürgen, wenn ich etwas übersehen habe. Ich kann mir auch gut vorstellen, dass diese Frage schon häufiger gestellt wurde.

Ich möchte gerne eine Explosion mit Sprites erzeugen.
Ich dachte mir, ich mache das durch eine schleife, klappt aber irgendwie nicht so...
Wie würdet ihr das machen? bzw warum funzt es nicht?... danke!

Code (glbasic) Select
LOADSPRITE  "1.bmp", 10
LOADSPRITE  "2.bmp", 11
LOADSPRITE  "3.bmp", 12
LOADSPRITE  "4.bmp", 13
LOADSPRITE  "5.bmp", 14
LOADSPRITE  "6.bmp", 15
LOADSPRITE  "7.bmp", 16



bomb_x = 250
bomb_y = 250


FOR E = 9 TO 16
exp_x = bomb_x
exp_y = bomb_y
SPRITE E + 1, exp_x, exp_y
exp_x = 1000
exp_y = 1000
NEXT


SHOWSCREEN
MOUSEWAIT
END

mull

Du must die Zeit da rein bringen:
Nach jedem Sprite Befehl muß dieser mit Showscreen angezeigt werden.

Bei deinem Beispiel siehst du nur das letzte Bild.

z.B
Code (glbasic) Select
t = GETTIMERALL()
WHILE
   IF GETTIMERALL()-t  >= 500 // alle 1/2 Sekunden = 500 Millisek.
        INC E, 1
        t=GETTIMERALL()
   ENDIF
   SPRITE E , ....
   SHOWSCREEN
WEND
[edit: GernotFrisch]
Das SPRITE ausserhalb der IF/ENDIF, sonst flackerts.
AMD Phenom II x4 955 Proc. 3.2 GHZ,  4GB Ram
Windows 7 64bit Ultima
NVIDIA GeForce GTX 460
Leistungsindex 5,7

Schranz0r

Da hatter recht der Gernot :D

Und ausserdem schicker ist es so , im Gernot-Style:

Code (glbasic) Select
   IF Timer < GETTIMERALL()
        INC E, 1
        Timer = GETTIMERALL() + 500  // alle 1/2 Sekunden = 500 Millisek.
    ENDIF
    SPRITE E, ....
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

...sollte keine Kritik sein. Ich bin ja so froh, dass ihr euch jetzt selbst schon so viel helft!

Schranz0r

Japp, soviel hast du hier net mehr zu Helfen... :D
Ausser bei so richtig Bombastischen Sachen, was ja selten vorkommt ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Naish

hmm... habs probiert... geht aber irgendwie nicht..

Code (glbasic) Select
LOADSPRITE "1.bmp", 1
LOADSPRITE "2.bmp", 2
LOADSPRITE "3.bmp", 3
LOADSPRITE "4.bmp", 4
LOADSPRITE "5.bmp", 5
LOADSPRITE "6.bmp", 6


IF Timer < GETTIMERALL()
        INC E, 1
        Timer = GETTIMERALL() + 500  // alle 1/2 Sekunden = 500 Millisek.

    ENDIF
    SPRITE E, 100, 100


SHOWSCREEN
MOUSEWAIT
END
is was falsch?

Quentin

bei diesem Coding wird er dir nur die erste Grafik anzeigen, nehme ich an. Verpacke das Ganze in eine WHILE-WEND-Schleife

z.b. so
Code (glbasic) Select
LOADSPRITE "1.bmp", 1
LOADSPRITE "2.bmp", 2
LOADSPRITE "3.bmp", 3
LOADSPRITE "4.bmp", 4
LOADSPRITE "5.bmp", 5
LOADSPRITE "6.bmp", 6

WHILE TRUE         // solange bis ESC gedrückt wird
    IF Timer < GETTIMERALL()
        INC E, 1
        IF E > 6 THEN E = 0    // sind wir bei der letzen Grafik angekommen, dann wieder von vorne anfangen
        Timer = GETTIMERALL() + 500  // alle 1/2 Sekunden = 500 Millisek.
    ENDIF
    SPRITE E, 100, 100
WEND

SHOWSCREEN
MOUSEWAIT
END

BumbleBee

Hi
Jo alles in 'ne Schleife damit die Animation immer wieder durchlaufen wird
So wie es Quentin schon erklärt hat. Ja, und diese Zeile ist natürlich auch wichtig
    IF E > 6 THEN E = 1  
damit alles wieder von vorne anfängt. Aber eben dann E=1 nicht E=0 weil es gibt bei dir ja kein Sprite mit
der Nr.0 :D
Ach und SHOWSCREEN dann in die Schleife sonst siehst du nix :D

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Quentin

ähem ja hast recht BumbleBee :)

Naish

super... danke... gab anfänglich Probleme, aber jetzt klappts.
In der While True schleife fehlte noch ein SHOWSCREEN.
Will jetzt aber auch gar nicht meckern.. nochmals vielen dank!

Quentin

ups, hast recht, sorry, hatte grad kein GLBasic zur Hand ;)