Animierte Sprites/Types schlucken (zu viel?) FPS

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Nerle

Betreff: Animierte Sprites/Types schlucken (zu viel?) FPS

BeitragDo, Okt 25, 2007 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir stellt sich folgendes Problem:

Bei jedem Schuss erzeuge ich ein Type + Sprite mit animierter Textur für den Hülsenauswurf, animiere es einmal, dann wird es wieder gelöscht.

Aber diese ganze Aktion kostet bereits ca. 30-70 FPS (70fps bei "Dauerfeuer", das sind etwa 1 Schuss pro Sekunde. Nach Erzeugung+6 Sekunden wird jedes einzelne jeweils wieder gelöscht)!

Wißt Ihr vielleicht, was da so viele FPS schluckt? Shocked

Ich habe auch schon überprüft, ob die ganze Aktion vielleicht permanent ausgeführt wird, wird sie nicht - pro Mausklick wird nur ein weiteres Sprite erzeugt.



Das Type selbst:

Code: [AUSKLAPPEN]

Type TMovingAmmo
Field   model%
Field   start%
Field   frame%
End Type



Hier der Code um das Patronen-Type zu erzeugen (schluckt bei mir 35 FPS!)

Code: [AUSKLAPPEN]

         ; Patronenauswurf kreeieren
             ammo.TMovingAmmo = NEW TMovingAmmo
             ammo\model      = CreateSprite(Hero)
         ammo\frame      = 0
         
         EntityParent   ammo\model,MoveDummy,0
             ScaleSprite   ammo\model,30,30
             RotateSprite   ammo\model,winkel+180
             RotateEntity   ammo\model,0,winkel,0
         MoveEntity   ammo\model,-35,-12,-10
         EntityParent   ammo\model,0


Und hier die Animations-Function dazu (kostet nochmal ca. 35 FPS Sad ):

Code: [AUSKLAPPEN]

      For shot.TMovingAmmo    = EACH TMovingAmmo
         If shot\frame <51 Then
                If millisecs()>shot\start+10 Then
                   shot\frame = shot\frame + 1
                   EntityTexture shot\model,BulletMovePumpgun_1,shot\frame
                   shot\start=millisecs()
                EndIf
             Else If shot\frame =51 Then
                If millisecs()>shot\start+6000
                   FreeEntity   shot\model
                   DELETE shot.TMovingAmmo
                EndIf
             EndIf
          Next
 

Dreamora

BeitragDo, Okt 25, 2007 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
3 Minuten forensuche hätte dir die antwort zwar gegeben aber:

Man kann mit Sprites nicht blödsinnig rumfeuern.
Jedes Sprite erzeugt eine eigene Surface.

800-1000 Surfaces und selbst eine gute Karte geht in die Knie, bei schwachen Karten reichen schon 300-400 Surfaces um einen nicht unerheblichen Einbruch zu erzeugen in der Performance.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Nerle

BeitragDo, Okt 25, 2007 23:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah.. Stichwort "Single Surface" Smile

Danke für den Hinweis, Dreamora, stand da jetzt mal wieder auf dem Schlauch Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group