Bild zuckt durch LoadAnimImage(GELÖST)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

ratzeputz

Betreff: Bild zuckt durch LoadAnimImage(GELÖST)

BeitragDi, Nov 03, 2009 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo zusammen.
mal wieder eine frage von mir Smile

folgendes problem:
ich bastle gerade an einem horizontalshooter. das ganze statische zeug wie das starfield, die aliens und so weiter sind alle schon eingebaut und funzen problemlos.

nun habe ich aber das spiel ein wenig weiter optimieren wollen und nun geht es darum die statischen objekte (aliens sind z.b. aus Oval feldern aufgebaut) mit images zu ersetzen.
besonderes problem habe ich nun bei der explosion der aliens wenn sie von meinem raumschiff getroffen werden.

hier ein kleines codeschnipsel wie ich die kollision abfange und wie ich dann die animation starte:

hier mal nur das laden des images.
es zeig eine explosion des alienraumschiffes in 20 frames:
Code: [AUSKLAPPEN]

image1 = LoadAnimImage("explo1.jpg", 70, 70, 0, 20)
MaskImage image1, 0,0,0


die abfrage der kollision eines schusses (als type) mit einem alien (als type):
Code: [AUSKLAPPEN]
For alien.aliens = Each aliens
   For schuss.shoot = Each shoot
      If schuss\ongame = True Then
         If ImagesOverlap (kugel, schuss\x, schuss\y, feind, alien\x, alien\y) And alien\dead = False Then
            alien\dead = True
            schuss\ongame = False
For i = 0 To 20
DrawImage image1, alien\x, alien\y, i
Flip
Cls
Next
         End If
      End If
   Next
   If alien\dead = False Then
      DrawImage feind, alien\x, alien\y
   End If
   alien\x = alien\x - alien\speed
   If alien\x = 0 Then
      Delete alien.aliens
   End If
Next


und ich weiss genau dass das problem hier liegt:
Code: [AUSKLAPPEN]
For i = 0 To 20
DrawImage image1, alien\x, alien\y, i
Flip
Cls
Next


durch das flippen beginnt das bild natürlich zu zucken.
aber wie kann ich die animation im hauptbuffer (bei mir wie so üblich der BackBuffer) zeichen lassen ohne das bild flippen zu müssen?

wenn ich das bild nicht flippe sehe ich natürlich die explosion einfach nicht und das alien verschwindet halt einfach wie von zauberhand Smile

ich hab leider absolut keine idee wie ich das anders bewerkstelligen kann.
irgendwelche vorschläge eurerseits?
  • Zuletzt bearbeitet von ratzeputz am Di, Nov 03, 2009 16:03, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragDi, Nov 03, 2009 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Du darfst Die Explosion nur einmal pro Mainloopdurchlauf aktualisieren, d.h. Du brauchst eine Variable in deinem Type die der Framenummer entspricht und die zählst Du wenn dein Alien explodieren soll hoch.
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
 

ratzeputz

BeitragDi, Nov 03, 2009 12:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ja auf sowas bin ich dann vor ein paar minuten auch draufgekommen.

ich habe es nun so gemacht dass ich meinen alien type um einen boolean "exploded" erweitert habe der beim generieren des aliens standardisiert "false" ist.

wenn das alien nun getroffen wird setzt sich ein bollean "dead" auf true.
bei jedem durchlauf der for each schleife der aliens wird nun abgefragt ob das alien "dead" (true) ist und gleichzeitig ob es nicht "exploded" ist (also false).
wenn das zutrifft dann lasse ich das alien mit drawimage an der position von alienexplo zeichnen dass mit 0 startet.
dann countert alienexplo um eines hoch.
gleichzeitig habe ich dann eine abfrage die kontrolliert ob alienexplo den wert 20 hat. wenn ja dann setzt es alien\exploded auf true und resettet alienexplo auf 0

nun funzt es...und es sieht gleich viel besser aus Smile

Code: [AUSKLAPPEN]
If alien\dead = True And alien\exploded = False Then
      DrawImage image1, alien\x, alien\y, alienexplo
      alienexplo = alienexplo + 1
      If alienexplo = 20 Then
         alienexplo = 0
         alien\exploded = True
      End If
   End If


edit:
jetzt habe ich nur ein problem ~~> die animation läuft sauschnell ab.
mit delay sähe es super aus...aber hält das programm an ~~> nix gut
waittimer greift irgendwie gar nicht ein. Sad

vielleicht jemand einen vorschlag?

BladeRunner

Moderator

BeitragDi, Nov 03, 2009 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Entweder mit millisecs() eine gewisse Zeitspanne überbrücken oder falls Du den Timer drin hast nur alle x Timerdurchläufe dein Frame hochzählen. Hier helfen weitere Hilfsvariablen im Type.
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
 

ratzeputz

BeitragDi, Nov 03, 2009 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ok das hat gefunzt.

habe jetz noch einen framestopper eingebaut der sobald ein alien getroffen ist raufzählt und bei jedem dritten step wandert das frame von drawimage um eines hoch.

funktioniert wunderbar und ich habe dadurch sogar den vorteil die explosionsanimation beliebig schnell anpassen zu können (z.b. für boss schiffe eine langsamere explosion)

vielen dank für die hilfe
theme kann gerne geschlossen werden so denn die notwendigkeit darin gesehen wird Smile

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group