Sprite Performance

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

battlegorge

Betreff: Sprite Performance

BeitragSo, Okt 23, 2005 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich programmiere gerade ein R-TYPE änliches Spiel.
Die Schüsse wollte ich mit sprites machen, aber dabei fängt es an zu ruckeln. Ab 60 sprites/screen gehen die fps von 60 auf 30.

Hier ist mein Testprogramm.
Mit SPACE schiesst man.
Was ist da so lahm?

Code: [AUSKLAPPEN]
Graphics3D 800,600,16,2
SetBuffer BackBuffer()

Global spritecounter

;player
Global player = CreateSphere(16)
PositionEntity player,-4.5,0,4
ScaleEntity player,.3,.3,.3

;enemy
Global enemy = CreateCube()
PositionEntity enemy, 3,0,4
ScaleEntity enemy,.3,.3,.3

;camera
Global camera = CreateCamera()
MoveEntity camera,0,0,-1
CameraRange camera,1,10000
CameraViewport camera,0,0,800,600
CameraProjMode camera,1
CameraZoom camera,1
light = CreateLight()

;variables
Global canshoot = 1
Global weapon = 1
Global level = 1
Global lastshot
Global shootframe
Global cooldown
Global loop
Global fpstimer = MilliSecs()+1000
Global fps

;type
Type shot
   Field x#
   Field y#
   Field z#
   Field hspeed#
   Field vspeed#
   Field remove
   Field gfx
End Type

;mainloop
While Not KeyHit(1)
   ;fps
   loop = loop + 1
   If MilliSecs() > fpstimer Then
      fpstimer = MilliSecs() + 1000
      fps = loop
      loop = 0
   EndIf
   Cls
   UpdateWorld
   RenderWorld
   
      WireFrame = True
   If fps > 59 Then
      EntityColor player,0,255,0
   ElseIf fps > 40 Then
      EntityColor player,255,255,0
   Else
      EntityColor player,255,0,00
   EndIf
   
   If weapon = 1 Then playershot1
   Color 0,255,0
   Text 10,10,"X   " + EntityX(player)
   Text 10,20,"Y   " + EntityY(player)
   Text 10,30,"spritecounter  " + spritecounter
   Color 255,0,0
   Text 10,50,"FPS  " + fps
   Flip
Wend
ClearWorld
FlushKeys
End

;function
Function playershot1()
If canshoot = 1 Then

;createshots
   If KeyDown(57) Then
      If cooldown < MilliSecs()
         p.shot = New shot
         p\x# = EntityX(player)
         p\y# = EntityY(player)
         p\z# = EntityZ(player)
         p\hspeed# = 0.1
         p\vspeed# = 0.0
         p\remove = 0
         p\gfx = CreateSprite()
         PositionEntity p\gfx,p\x#,p\y#,p\z#
         ScaleSprite p\gfx,.03,.3
         spritecounter = spritecounter + 1
         cooldown = MilliSecs() + 15
      EndIf
   EndIf
   
EndIf
   
;updateshots   
   For p.shot = Each shot
      MoveEntity p\gfx,p\hspeed#,p\vspeed#,0
      p\x# = p\x# + p\hspeed#
      p\y# = p\y# + p\vspeed#
      If p\x# < -5 Or p\x# > 5 Or p\y# < -4 Or p\y# > 4 Then p\remove = 1
      If p\remove = 1 Then
         FreeEntity p\gfx
         Delete p.shot
         spritecounter = spritecounter - 1
      EndIf
   Next
End Function

SpionAtom

BeitragSo, Okt 23, 2005 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei gedrückter Leertaste erreiche bis zu 90 Schuss, und selbst dann habe ich keine fps Einbußungen.

theotheoderich

BeitragMo, Okt 24, 2005 7:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe auch bei max. 90 Sprites keinerlei Performanceeinbussen.
Hätte mich bei 90 Sprites auch schwer gewundert Very Happy
Da Du die erstellten Sprites immer korrekt löscht, wenn diese den Screen verlassen, sollten auch bei längerem spielen keine Probleme auftauchen.
Was für einen Rechner hast Du denn?
Gruß
TheoTheoderich
--
The box label said, "Requires Windows XP or better.", so I bought an Amiga Computer.

Artemis

BeitragMo, Okt 24, 2005 8:14
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab max. 95 sprites und keine geschw.-einbußen (konstant 85fps)
 

battlegorge

BeitragMo, Okt 24, 2005 9:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe einen Athlon 1,4Ghz 512 mb ram und eine geeforce6600.
Müsste doch eigentlich noch reichen oder?
Ab 60 sprites gehen die fps bergab, bei 95 sprites habe ich dann konstant 30 fps.
Die fps springen ganz seltsam von 60 auf 30 in 2 schritten.

BtbN

BeitragMo, Okt 24, 2005 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich 95 Schuss aufm Screen hab, sinkt bei mir die Framerate ebenfals auf 30FPS...
Hab ne ATI9250 Mit 128MB, nen Athlon 1GhZ, und nen Asus Mainboard.
Ka, woran das liegt...

Firstdeathmaker

BeitragMo, Okt 24, 2005 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Sprites: 49
Frames: 76

keine Frameeinbußen.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

SpionAtom

BeitragMo, Okt 24, 2005 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Habt Ihr das auch, dass bei den Salven manchmal Lücken auftauchen.
Übrigens ist mein System:
Athlon 2600+
1024 MB RAm
HIS EXCALIBUR X800PRO *stolzsei*

theotheoderich

BeitragMo, Okt 24, 2005 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit den Lücken hat etwas mit der eingestellten Bildwiederholrate zu tun. Bei 60 FPS z. B. wird alle paar Millisekunden (cooldown = MilliSecs() + 15) ein neuer Schuss erstellt. Manchmal passt dann die Schusserstellung nicht mit der Grafikwiedergabe überein.
Bei einer Bildschirmaktualisierungsrate von 75 Hz treten bei mir so gut wie keine 'Lücken' mehr auf.

Lässt man das Programm allerdings im Vollbild laufen, und hat den VSync ausgeschaltet kommt man auf so dermassen hohe Framezahlen (bei mir so um die 1900FPS beim schiessen) dass der Bildschirm diese nicht mehr wiedergeben kann und man sieht die Schüsse sehr verzehrt mit grossen Lücken dazwischen.
Gruß
TheoTheoderich
--
The box label said, "Requires Windows XP or better.", so I bought an Amiga Computer.
 

battlegorge

BeitragDi, Okt 25, 2005 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei unter 100 sprites dürfte das Programm aber eigentlich nicht so lahm werden. Auch auf relativ schwachen PCs.
Oder ist irgendwo im code eine Geschwindigkeitsbremse?

Ebola33

BeitragDi, Okt 25, 2005 19:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Vergiss die Sprites, sieh zu dass du dich mit dem Thema Single Surface beschäftigst. So bringst du auch Problemlos 500 Sprites auf den Screen.

Mfg Ebola
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/
 

battlegorge

BeitragMi, Okt 26, 2005 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Singlesurfaces sehe ich mir mal an.
Ich habe die Schüsse jetzt erstmal mit createsphere gemacht, das ist schonmal wesentlich schneller.

soli

BeitragDo, Okt 27, 2005 4:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Möglich das es an deinem Athlon liegt.
Ich hatte solche Phänomene früher auch schon mal.

Wenn ich das cooldown auf 5 stelle,
komme ich selbst bei eingeschlatetem Debugger noch auf über 90 FPS bei 95 Sprites.

System: P3 - 900 Mhz
solitaire

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group