Sprite Performance
Übersicht

battlegorgeBetreff: Sprite Performance |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei gedrückter Leertaste erreiche bis zu 90 Schuss, und selbst dann habe ich keine fps Einbußungen. | ||
![]() |
theotheoderich |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe auch bei max. 90 Sprites keinerlei Performanceeinbussen.
Hätte mich bei 90 Sprites auch schwer gewundert ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hab max. 95 sprites und keine geschw.-einbußen (konstant 85fps) | ||
battlegorge |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... ![]() verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/ |
battlegorge |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die Singlesurfaces sehe ich mir mal an.
Ich habe die Schüsse jetzt erstmal mit createsphere gemacht, das ist schonmal wesentlich schneller. |
||
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group