Mais il me parait logique que clipsprite soit plus lent que grabsprite, Enfin , je m'en vais faire un test.
problème d'affichage
-
Anonyme
j'ai refais le test avec un sprite de 100*100, j'ai un ralentissement à partir de 1800 sprites , sinon le FPS ne bronche pas, il reste à 60.fly a écrit :Peut t'étre que mon ralentissement est normal et que purebasic n'est pas capable d'afficher 1000 sprite(environ 100*100 pixel) à un fps de 60.Mais cela m'étonne tout de même.
Code : Tout sélectionner
InitSprite()
InitKeyboard()
InitMouse()
InitSound()
InitSprite3D()
OpenScreen(1280,1024,32,"essai")
UsePNGImageDecoder()
UseJPEGImageDecoder()
;LoadSprite(0,"data\porte etendart.png")
CreateSprite(0,100,100)
StartDrawing(SpriteOutput(0))
Circle(50,50,50,$123456)
StopDrawing()
Structure terrain_1
x.f
y.f
EndStructure
Global NewList terrain.terrain_1()
Declare principal()
Repeat
FlipBuffers()
ClearScreen(0)
ExamineKeyboard()
If Second < ElapsedMilliseconds()
Second = ElapsedMilliseconds()+1000
fps = Frame_Counter
Frame_Counter = 0
Else
Frame_Counter + 1
EndIf
; création des procedures
principal()
StartDrawing(ScreenOutput())
DrawText(0,0,"FPS : "+Str(fps) + " - Nb Sprites : " + Str(CountList(terrain())))
StopDrawing()
Until KeyboardPushed(#PB_Key_Escape)
Procedure principal()
If CountList(terrain())<2000
AddElement(terrain())
terrain()\x=Random(1280)
terrain()\y=Random(1024)
EndIf
ForEach terrain()
DisplayTransparentSprite(0,terrain()\x,terrain()\y)
Next
EndProcedurehttp://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
ton FPS reste à 60 jusqu'à combien de sprites affichés ?
et ton débogueur tu as regardé s'il était activé ?
Si tu utilises une version de démo , il est toujours activé.
et ton débogueur tu as regardé s'il était activé ?
Si tu utilises une version de démo , il est toujours activé.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Oui j'ai une carte graphique avec 256mo de mémoire partager.
mon debogueur est désactiver
Mon fps passe de 60 à 30 à environ 1600 éléments quand j'utilise un sprite tout simple créer avec "createsprite", mais quand j'utile une image que j'ai chargée comme sprite mon fps passe de 60 à 30 à environ 600 éléments.
mon debogueur est désactiver
Mon fps passe de 60 à 30 à environ 1600 éléments quand j'utilise un sprite tout simple créer avec "createsprite", mais quand j'utile une image que j'ai chargée comme sprite mon fps passe de 60 à 30 à environ 600 éléments.
Dans ce cas utilise les sprites 3D comme te le suggère Cpl.Bator
Avec des sprites 3D je peux afficher jusqu'à 3600 sprites sans que le FPS bouge.
Avec des sprites 3D je peux afficher jusqu'à 3600 sprites sans que le FPS bouge.
Code : Tout sélectionner
InitSprite()
InitKeyboard()
InitMouse()
InitSound()
InitSprite3D()
OpenScreen(1280,1024,32,"essai")
UsePNGImageDecoder()
UseJPEGImageDecoder()
;LoadSprite(0,"data\porte etendart.png")
CreateSprite(0,100,100,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(0))
Circle(50,50,50,$123456)
StopDrawing()
CreateSprite3D(0,0)
Structure terrain_1
x.f
y.f
EndStructure
Global NewList terrain.terrain_1()
Declare principal()
Repeat
FlipBuffers()
ClearScreen(0)
ExamineKeyboard()
If Second < ElapsedMilliseconds()
Second = ElapsedMilliseconds()+1000
fps = Frame_Counter
Frame_Counter = 0
Else
Frame_Counter + 1
EndIf
; création des procedures
principal()
StartDrawing(ScreenOutput())
DrawText(0,0,"FPS : "+Str(fps) + " - Nb Sprites : " + Str(CountList(terrain())))
StopDrawing()
Until KeyboardPushed(#PB_Key_Escape)
Procedure principal()
If CountList(terrain())<4000
AddElement(terrain())
terrain()\x=Random(1280)
terrain()\y=Random(1024)
EndIf
Start3D()
ForEach terrain()
DisplaySprite3D(0,terrain()\x,terrain()\y)
Next
Stop3D()
EndProcedurehttp://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
-
Anonyme
-
Anonyme
Ce n'est pas question de jeux recent ou pas, 2d ou 3d ne change rien au programme, la question est là mémoire, si tu n'a plus de place sur ta ram, logiquement la Ram est remplacé par une partie du disque dur, et les accès disques sont plus long que ceux de la ram, d'ou le ralentissement.
Essaye sur un pc moins puissant , mais avec une carte vidéo avec sa propre mémoire.
Essaye sur un pc moins puissant , mais avec une carte vidéo avec sa propre mémoire.
toujours le même probleme
Dobro, pourrais tu essayer mon code avec comme sprite une image png qui fais environ 100*100 pour voir si c'est le code ou mon ordi qui deconne.
merci d'avance
Dobro, pourrais tu essayer mon code avec comme sprite une image png qui fais environ 100*100 pour voir si c'est le code ou mon ordi qui deconne.
merci d'avance
Code : Tout sélectionner
InitSprite()
InitKeyboard()
InitMouse()
InitSound()
InitSprite3D()
OpenScreen(1440,900,32,"essai")
UsePNGImageDecoder()
UseJPEGImageDecoder()
LoadSprite(0,"porte etendart.png",#PB_Sprite_Texture)
CreateSprite3D(0,0)
Structure terrain_1
x.f
y.f
EndStructure
Global NewList terrain.terrain_1()
Global terrain.terrain_1
Declare principal()
Repeat
FlipBuffers()
ClearScreen(0)
ExamineKeyboard()
If Second < ElapsedMilliseconds()
Second = ElapsedMilliseconds()+1000
fps = Frame_Counter
Frame_Counter = 0
Else
Frame_Counter + 1
EndIf
principal()
StartDrawing(ScreenOutput())
DrawText(0,0,"FPS : "+Str(fps))
DrawText(200,0,StrF(terrain\x))
StopDrawing()
; création des procedures
Until KeyboardPushed(#PB_Key_Escape)
Procedure principal()
If CountList(terrain())<2000
terrain\x=terrain\x+1
AddElement(terrain())
terrain()\x=Random(1440)
terrain()\y=Random(900)
EndIf
Start3D()
ForEach terrain()
DisplaySprite3D(0,terrain()\x,terrain()\y)
Next
Stop3D()
EndProcedure