Animation zu schnell!!!

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

[SHM]StArMaStEr

Betreff: Animation zu schnell!!!

BeitragDo, Feb 26, 2004 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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!!!!

BladeRunner

Moderator

BeitragDo, Feb 26, 2004 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

DC

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragDo, Feb 26, 2004 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink)

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

BladeRunner

Moderator

BeitragDo, Feb 26, 2004 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragDo, Feb 26, 2004 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 27, 2004 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
werds ma probieren. danke erstma und cya leute! Wink
BB-coden was das Zeug hällt!!!!
 

Edlothiol

BeitragFr, Feb 27, 2004 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Noch einfacher geht das mit
Code: [AUSKLAPPEN]
Timer = CreateTimer(60)
...
Hauptschleife:
Waittimer Timer

Hubsi

BeitragFr, Feb 27, 2004 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
@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 Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group