Bild zuckt durch LoadAnimImage(GELÖST)
Übersicht

ratzeputzBetreff: Bild zuckt durch LoadAnimImage(GELÖST) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo zusammen.
mal wieder eine frage von mir ![]() 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 ![]() 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
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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. ![]() vielleicht jemand einen vorschlag? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group