Animation zu schnell!!!
Übersicht

[SHM]StArMaStErBetreff: Animation zu schnell!!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi Leute! Brauch Hilfe! Die Animation kaboom.jpg läuft zu schnell. Ich habs schon mit delay probiert aber is sch**** weildas ganze proggi anhält. Bitte helft mir ma, hier is der Code
Code: [AUSKLAPPEN] Graphics 800,600,16,1
SetBuffer BackBuffer() Dim rak(50,2) Dim geg(10,2) Global leben=3 Global gameover=False takt = CreateTimer(6) x=400 y=550 ship = LoadImage("ship.bmp") shot =LoadImage("shot.bmp") feind=LoadImage("enemy.bmp") back = LoadImage("stars.bmp") anim = LoadAnimImage("kaboom.jpg",60,48,0,12) SeedRnd MilliSecs() Repeat Cls h=h+3 g#=g#+1.5 If h=200 Then h=0 If g#=200 Then g#=0 TileImage back,33,h TileImage back,89,g# If gameover=False If KeyDown(200) Then y=y-3 If KeyDown(208) Then y=y+3 If KeyDown(203) Then x=x-5 If KeyDown(205) Then x=x+5 If x>710 Then x=710 If x<30 Then x=30 If y>520 Then y=520 If y<50 Then y=50 DrawImage ship,x,y If KeyHit(57) schuss=schuss+1 rak(schuss,0)=1 rak(schuss,1)=x+19 rak(schuss,2)=y-25 EndIf If schuss=50 Then schuss=1 For i=1 To 50 If rak(i,0)=1 DrawImage shot,rak(i,1),rak(i,2) rak(i,2)=rak(i,2)-15 EndIf Next For j=1 To 6 If geg(j,0)=0 geg(j,0)=1 geg(j,1)=Rand(30,710) geg(j,2)=Rand(-600,-80) EndIf If geg(j,0)=1 DrawImage feind,geg(j,1),geg(j,2) geg(j,2)=geg(j,2)+2 EndIf If geg(j,2)>600 Then geg(j,0)=0 Next For i=1 To 50 If rak(i,0)=1 For j=1 To 10 If geg(j,0)=1 If ImagesCollide(feind,geg(j,1),geg(j,2),0,shot,rak(i,1),rak(i,2),0) rak(i,0)=0 geg(j,0)=0 For w=0 To 11 DrawImage anim,geg(j,1),geg(j,2),w Next highscore=highscore+10 EndIf EndIf Next EndIf Next For j=1 To 10 If geg(j,0)=1 If ImagesCollide(ship,x,y,0,feind,geg(j,1),geg(j,2),0) geg(j,0)=0 leben = leben-1 EndIf EndIf Next If leben=0 Then gameover=True Text 10,10,"Leben: "+leben Text 10,30,"Highscore: "+highscore Else For i=1 To 1200 Text 350,300, "Du hast verloren!" Next EndIf Flip Until KeyHit(1) |
||
BB-coden was das Zeug hällt!!!! |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] For w=0 To 11 DrawImage anim,geg(j,1),geg(j,2),w Next ... bringt dir nix- die schleife wird durchgezählt bevor das Prg weiterläuft- Du siehst also nur das letzte Bild. Besser ist für jede Explo nen Counter zu machen der Hochzählt. zb: Code: [AUSKLAPPEN] geg(j,0)=-1 ;gegner explodiert
. . . if geg(j,0)=-1 then drawimage anim, geg(j.1),geg(j.2),geg(j.10) ;wobei in geg(j.10) das exploframe gespeichert ist geg(j.10)=geg(j.10)+1 if geg(j.10 >11 then geg(j.10)=0:geg(j.0)=0 end if Wie immer kein Anspruch auf Vollständigkeit- aber das Prinzip sollte klar sein. |
||
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 |
![]() |
DCSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du malst die einzelnen Frames direkt hintereinander ohne Verzögerung und ohne Flip in den Backbuffer - aber nur durch Flippen wird der Backbuffer zum Frontbuffer und damit sichtbar. Also kann das ganze eigentlich nicht einmal funktionieren wenn du ein Delay reinmachst.
Ersetze folgenden Code: Code: [AUSKLAPPEN] For w=0 To 11
DrawImage anim,geg(j,1),geg(j,2),w Next Durch sowas hier: Code: [AUSKLAPPEN] if millisecs()-frametimer>50 then
frametimer=millisecs() frame=frame+1 if frame>11 then frame=0 endif DrawImage anim,geg(j,1),geg(j,2),frame Prinzip: In der Variable frametimer wird die Zeit gespeichert. Wenn 50 MS zwischen aktueller Zeit und der gespeicherten Zeit vergangen sind, wird das Frame erhöht und die Zeit in der Variable auf die aktuelle Zeit gesetzt. Mit der 50 kannst du also ganz einfach die Geschwindigkeit beliebig regulieren. (Code ist nicht getestet .. ich hoffe er funktioniert ![]() Und ähm rücke unbedingt deinen Code ein und benutze aussagekräftigere Variablennamen! |
||
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com | www.CarnageContest.com | www.Stranded3.com |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
@DC:
kann so leider nit gehen- in seinem Code malt der die Explo bei Positiver Kollision. Beim nächsten Schleifendürchgang ist der Gegner aber schon genullt, daher wird das komplette anifeld übersprungen. @ star: Du kannst DC´s code jedoch in meinen Integrieren, denn meiner dürfte auch noch arg schnell rennen ... EDIT: also so ungefähr... Code: [AUSKLAPPEN] if geg(j,0)=-1 then drawimage anim, geg(j.1),geg(j.2),geg(j.10) ;wobei in geg(j.10) das exploframe gespeichert ist if millisecs() > timer then geg(j.10)=geg(j.10)+1 timer = millisecs()+50 end if if geg(j.10 >11 then geg(j.10)=0:geg(j.0)=0 end if |
||
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 |
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst, auch die Frames eingrenzen und die Cpu Leistung runterdrücken indem du folgenden Code am anfang der Hauptschleife reintust:
Code: [AUSKLAPPEN] startzeit=MilliSecs()
herz=60 While (MilliSecs()-startzeit)<(1000/herz) Delay(10) Wend |
||
[SHM]StArMaStEr |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
werds ma probieren. danke erstma und cya leute! ![]() |
||
BB-coden was das Zeug hällt!!!! |
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Noch einfacher geht das mit
Code: [AUSKLAPPEN] Timer = CreateTimer(60)
... Hauptschleife: Waittimer Timer |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Edlothiol: Das bremst das Proggi auf 60 fps ein und sonst nix. Dann würden die 12 Frames der Animation also in 12 / 60 = 0,2 Sekunden durch sein. Etwas arg schnell für das ungeübte Auge ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group