GLBasic forum

Other languages => GLBasic - de => Topic started by: Naish on 2007-Jun-29

Title: explosion
Post by: Naish on 2007-Jun-29
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
Title: explosion
Post by: mull on 2007-Jun-29
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.
Title: explosion
Post by: Schranz0r on 2007-Jul-02
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, ....
Title: explosion
Post by: Kitty Hello on 2007-Jul-02
...sollte keine Kritik sein. Ich bin ja so froh, dass ihr euch jetzt selbst schon so viel helft!
Title: explosion
Post by: Schranz0r on 2007-Jul-02
Japp, soviel hast du hier net mehr zu Helfen... :D
Ausser bei so richtig Bombastischen Sachen, was ja selten vorkommt ;)
Title: explosion
Post by: Naish on 2007-Jul-02
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?
Title: explosion
Post by: Quentin on 2007-Jul-02
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
Title: explosion
Post by: BumbleBee on 2007-Jul-02
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
Title: explosion
Post by: Quentin on 2007-Jul-02
ähem ja hast recht BumbleBee :)
Title: explosion
Post by: Naish on 2007-Jul-02
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!
Title: explosion
Post by: Quentin on 2007-Jul-02
ups, hast recht, sorry, hatte grad kein GLBasic zur Hand ;)