Re: me résiste
Publié : dim. 05/août/2007 14:53
...........
Forums PureBasic - Français
https://www.purebasic.fr/french/
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()
If OpenScreen (1024, 768, 32, "max de sprite3D" )=0
;If OpenScreen (1024, 768, 16, "max de sprite3D" )=0
MessageRequester ( "Error" , "Can't open a 640*480 - 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>1024-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>768-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 (150,1, "Sprite 3D. technique: clonage. objectif: tester son PC afin connaître le nombre de sprite3D 256*256 qu'il peut gérer sans difficulté")
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 (1,40, "nombre de clone: " +nbr_clone$)
DrawText (1,700, "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=512; départ au centre de l'écran.
pasbo()\Y=384
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 (1,1, "FPS: " +FPS$)
StopDrawing ()
Return
changement_direction_clavier(#PB_Key_Right,1,0,0,0,1,1,0,0,1,-1,0,1,0,4,1,2,2,0)
Ca marche pô! Mon ordi veut des datas!!!et voici la suite (ce n'est pas fini, mais bon, ça marche quand même, j'vais pas aussi tester les capacités du forum non plus):
Je confirme, car c'est ce que j'ai essayé dès le début sous vos yeux, un post doit être pas loin sur ce sujet.Crystal Noir a écrit :si on utilise des sprites2D avec les Fx (et donc transparence) avec les instructions StartFx() ca va ramer c'est sur.
Pourquoi donc ? ça marche très bien. joue donc à Peur Basique, et tu constatera que c'est fluide, même sur un vieux PC de 5 ans !Crystal Noir a écrit :Mais il ne sert à rien de prendre des sprites3D c'est si juste faire avancer un simple sprite.
Oui, mais à quel époque date cette affirmation de la doc ? je pense qu'il est bon de se poser la question. Une sapphire radeon 7000 au prix de 25 euros révélant ainsi son grand âge, arrive à faire tourner Peur Basique sans difficulté. Alors certes ce ptit jeu est dépourvu de scrolling, mais l'évolution du matériels permet d'envisager une utilisation intensive de sprite3d.Crystal Noir a écrit : De toute façon la doc le dit clairement : les sprites3D sont moins rapides et qu'il est préférable d'utiliser les sprites pour l'affichage de simple sprite sans effet.
- fred te le diras mieux que nous.beauregard a écrit : Oui, mais à quel époque date cette affirmation de la doc ? )
- On s'en fout un peu de toute façon, je pense que tous ici, on a rien a prouver. Chacun fait comme il veut et code à sa manière. On t'expose notre façon de faire, après tu fais comme tu veuxbeauregard a écrit : Bien sur je peux me tromper. mais j'attend quand même un argument implacable de ta part... sous la forme d'un test avec un code ( un ptit code, ça prend pas longtemps à faire).
beauregard a écrit : j'attend quand même un argument implacable de ta part... sous la forme d'un test avec un code ( un ptit code, ça prend pas longtemps à faire).