Bon, je ne suis pas tres jeux mais voila ce que ca donne avec une carte AGP Nvidia Geforce 6600 256ko ram :
275-300 29 fps alors la c'est la degringolade, ca commence a ramer serieusement
245-300 29 fps alors la c'est la degringolade, ca commence a ramer serieusement
Je crois que c'est la memoire qui est saturé, ca devrait mieux rendre avec une carte 512 ko...
Cela dit apparement, je n'ai pas une bouse, le processeur doit y etre pour quelque chose, c'est un dual core ancienne gamme P4 D 3.40 mhz, il ne m'a pas couté beaucoups mais il arrache dans la plupart des applis notement pour les encodages videos comme quoi il faut etre plus mailin que le marketing de merde qu'on nous sert a longueur de journee et attendre les bonne opportunite avant d'acheter, c'est pour ca que j'attends toujours la sortie d'une nouvelle technologie pour acheter plutot l'ancienne a prix cassé...
Code : Tout sélectionner
; ------------------------------------------------------------
; un max de sprite3D - 2007 - source purebasic 4.02
; objectif du test: connaître le nombre maximum de sprite3D, d'une taille respectable de 256*256,
; que mon PC peut afficher sans difficulté.
; ------------------------------------------------------------
UsePNGImageDecoder () ; oui, toi t'es obligatoire.
If InitMouse ()=0 Or InitSprite ()=0 Or InitKeyboard ()=0 Or InitSprite3D ()=0
MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0)
End
EndIf
Enumeration ; ici, on donne un petit nom à nos sprites( non, chuis pas un numéro !):
#pasbo
#pasbo3D
EndEnumeration
Structure objet
id.l ; <-- ici, il faut cette nouvelle variable (id comme identité).
x.w
Y.w
sensx.l
sensy.l
EndStructure
Global NewList pasbo.objet(); et là, vous prenez peur ! ;)
Global zut1,zut2 ; utile pour le codeur
Declare Fclone()
Global Largeur.l,Hauteur.l
; Ici choisir la resolution de l'ecran
Largeur=1680 : Hauteur=1050
;Largeur=1024 : Hauteur=768
;Largeur=800 : Hauteur=600
If OpenScreen (Largeur, Hauteur, 32, "max de sprite3D" )=0
MessageRequester ( "Error" , "Can't open a "+Str(Largeur)+"x"+Str(Hauteur)+" 32 bit screen !" , 0)
End
EndIf
;LoadSprite(#pasbo, "itest1.png", #PB_Sprite_Texture); -> chargement d'une image d'une taille de 256*256.
;CreateSprite3D ( #pasbo3D , #pasbo )
; I
; ou
; I
CreateSprite ( #pasbo ,256,256, #PB_Sprite_Texture )
StartDrawing ( SpriteOutput ( #pasbo ))
BackColor ( RGB (0,0,0))
For i=0 To 7
Box (0+(i*32),0, 32, 32, RGB ( 255-(i*10) , 200-(i*10) , 0))
Box (0+(i*32),32, 32, 32, RGB ( 235-(i*10) , 180-(i*10) , 20))
Box (0+(i*32),64, 32, 32, RGB ( 215-(i*10) , 160-(i*10) , 40))
Box (0+(i*32),96, 32, 32, RGB ( 195-(i*10) , 140-(i*10) , 60))
Box (0+(i*32),128, 32, 32, RGB ( 175-(i*10) , 120-(i*10) , 80))
Box (0+(i*32),160, 32, 32, RGB ( 155-(i*10) , 100-(i*10) , 100))
Box (0+(i*32),192, 32, 32, RGB ( 135-(i*10) , 80-(i*10) , 120))
Next
Box (40,0, 8*4, 8, RGB (48,231,225))
Box (24,8, 8*8, 8, RGB (64,233,227))
Box (40,16, 8*4, 8, RGB (80,235,229)):Box (16,16, 8, 8, RGB (80,235,229)):Box (88,16, 8, 8, RGB (80,235,229))
Box (24,16, 8*2, 8, RGB (255,255,255)):Box (24+(6*8),16, 8*2, 8, RGB (255,255,255))
Box (48,24, 8*2, 8, RGB (102,237,233)):Box (8,24, 8, 8, RGB (102,237,233)):Box (96,24, 8, 8, RGB (102,237,233))
Box (16,24, 8*4, 8, RGB (255,255,255)):Box (16+(6*8),24, 8*4, 8, RGB (255,255,255))
Box (48,32, 8*2, 8, RGB (123,240,236)):Box (8,32, 8, 8, RGB (123,240,236)):Box (96,32, 8, 8, RGB (123,240,236))
Box (16,32, 8*4, 8, RGB (255,255,255)):Box (16+(6*8),32, 8*4, 8, RGB (255,255,255))
Box (40,40, 8*4, 8, RGB (146,242,239)):Box (8,40, 8*2, 8, RGB (146,242,239)):Box (88,40, 8*2, 8, RGB (146,242,239))
Box (24,40, 8*2, 8, RGB (255,255,255)):Box (24+(6*8),40, 8*2, 8, RGB (255,255,255))
Box (0,48, 8*14, 8, RGB (168,245,242))
Box (0,56, 8*14, 8, RGB (191,248,246))
Box (0,64, 8*14, 8, RGB (211,250,249))
Box (0,72, 8*14, 8, RGB (228,252,251))
Box (0,80, 8*14, 8, RGB (238,253,252))
Box (0,88, 8*14, 8, RGB (244,254,253))
Box (0,96, 8*2, 8, RGB (255,255,255)):Box (24,96, 8*3, 8, RGB (255,255,255))
Box (64,96, 8*3, 8, RGB (255,255,255)) :Box (96,96, 8*2, 8, RGB (255,255,255))
Box (0,104, 8, 8, RGB (255,255,255)):Box (32,104, 8*2, 8, RGB (255,255,255))
Box (64,104, 8*2, 8, RGB (255,255,255)) :Box (104,104, 8, 8, RGB (255,255,255))
StopDrawing ()
CreateSprite3D ( #pasbo3D , #pasbo )
Repeat ; boucle principale
FlipBuffers (): ClearScreen ( RGB (0,0,0))
ExamineMouse ():ExamineKeyboard ()
Start3D ()
; fabrication en manuel.
If KeyboardPushed(#PB_Key_Add)=0 And touche=1:touche=0:EndIf
If KeyboardPushed(#PB_Key_Add) And touche=0:touche=1
nbr_clone+1 ; juste pour connaitre le nombre de clone à l'écran
Fclone()
EndIf ; fin Clonage sprite3D.
;*******************************************************************************************************
; Affichage clone si existe ( appuyez sur la touche + du pavé numérique).
ForEach pasbo() ; une bien belle boucle ( répétez plusieurs fois "bien belle boucle", pas facile hein ?).
; bord gauche
If pasbo()\x<1
pasbo()\sensx=-pasbo()\sensx ; inverse les coordonnées x (rebondit)
EndIf
; bord droit
If pasbo()\x>Largeur-256
pasbo()\sensx=-pasbo()\sensx ; inverse les coordonnées x (rebondit)
EndIf
; bord haut
If pasbo()\Y<1
pasbo()\sensy=-pasbo()\sensy ; inverse les coordonnées y(rebondit)
EndIf
; bord bas
If pasbo()\Y>Hauteur-256
pasbo()\sensy=-pasbo()\sensy ; inverse les coordonnées y(rebondit)
EndIf
pasbo()\x=pasbo()\x+pasbo()\sensx ; fait avancer les balles
pasbo()\Y=pasbo()\Y+pasbo()\sensy
;- affichage
DisplaySprite3D ( pasbo()\id , pasbo()\x, pasbo()\Y, 255);155)
If KeyboardPushed(#PB_Key_Subtract)=0 And touche2=1:touche2=0:EndIf
If KeyboardPushed(#PB_Key_Subtract) And touche2=0:touche2=1
nbr_clone-1 ; juste pour connaitre le nombre de clone à l'écran
; Si appui sur la touche - du pavé numérique, alors supprimer le clone:
DeleteElement(pasbo()):NextElement(pasbo())
EndIf ; fin Clonage sprite3D.
Next
Stop3D ()
; ligne d'information et de test afin de connaître la valeur des variables:
StartDrawing ( ScreenOutput ())
DrawingMode (1)
FrontColor ( RGB (255,255,255))
nbr_clone$= Str (nbr_clone)
zut1$= Str (zut1)
zut2$= Str (zut2)
; DrawText (50,80, "zut1: " +zut1$)
; DrawText (50,100, "zut2: " +zut2$)
DrawText (100,1, "Res : "+Str(Largeur)+"x"+Str(Hauteur)+" - Sprite 3D. Tester son PC afin de connaître le nombre de sprite3D 256*256 qu'il peut gérer...")
FrontColor ( RGB (164,21,21)) :DrawText (1+1,40+1, "nombre de clone: " +nbr_clone$);:DrawText (450+1,750+1, "NIVEAU: " +niveau$)
FrontColor ( RGB (253,201,255)) :DrawText (1,40, "nombre de clone: " +nbr_clone$);DrawText (450,750, "NIVEAU: " +niveau$)
DrawText (2,40, "nombre de clone: " +nbr_clone$)
DrawText (2,Hauteur-40, "appuyez sur la touche + ou - du pavé numérique ")
StopDrawing ()
Gosub fps ; nombre d'image par seconde ( à placer dans tout vos jolis programmes).
Until KeyboardPushed ( #PB_Key_Escape ): End ; fin de la boucle principale (appuyez sur la touche Esc)
Procedure Fclone() ; ici, nous allons cloner un maximum de sprite3D.
LastElement(pasbo())
AddElement(pasbo())
pasbo()\id=#pasbo3D
pasbo()\x=(Largeur/2)-256; départ au centre de l'écran.
pasbo()\Y=(Hauteur/2)-256
result.l ; determine le sens de deplacement du pasbo:
result=Random(3)
If result=0:pasbo()\sensx=2:pasbo()\sensy=2:EndIf
If result=1:pasbo()\sensx=2:pasbo()\sensy=-2:EndIf
If result=2:pasbo()\sensx=-2:pasbo()\sensy=2:EndIf
If result=3:pasbo()\sensx=-2:pasbo()\sensy=-2:EndIf
EndProcedure
fps:
If Val ( FormatDate ( "%ss" , Date ()))=sek
fps+1
Else
FPS$= Str (fps)
fps=0
EndIf
sek= Val ( FormatDate ( "%ss" , Date ()))
StartDrawing ( ScreenOutput ())
DrawingMode (1)
FrontColor ( RGB (255,255,255))
DrawText (2,1, "FPS: " +FPS$)
StopDrawing ()
Return