Dragon's fury(fallait pas l'énerver!):MAJ6 chgt de planches

Programmation avancée de jeux en PureBasic
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Polux a écrit : Mais bon, je crois qu'il faut surtout se focaliser sur le fait: " Pourquoi utiliser des sprites3d pour faire des choses faisaibles ( et plus facilement ) avec la commande sprite classique. Si c'est juste pour dire, mon jeu il utilise la 3d ( alors que c'est completement faux ) et j'ai la plus grosse, c'est domage... Si par contre, on les utilise pour égayer un jeu 2d ( effets divers ), je pense que c'est plus sage.
Enfin, chacun fait comme il veut :wink:
Pourquoi ?

Si j'ai utilisé uniquement des sprites3D avec Peur Basique, c'est parce que je me suis rendu compte que le décor, sous forme de labyrinthe, constitué de sprites classique faisait chuter le fps.
En mettant ce décor sous forme de sprites3D, tout est devenu fluide sur ma vieille machine !! Et voilà pourquoi je m'agite...
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

Dobro a écrit :mon pureNoide2 est un prg de casse brique dispo sur mon site
ici :
http://michel.dobro.free.fr/Purebasic/d ... noide2.zip

ce prg affiche plus de 1000 sprites en permanence a l'ecran
(entre les etoiles du fond,les briques, la balle, les gellules..ect ...)
dont certains sont en DisplayTransparentSprite()
le tout est en Sprite 2D , et c'est fluide aussi !! :D
pourtant j'ai choisi le mode screen-Window qui n'est pas une reference !

comme quoi je pense que cette histoire de fluidité ne viens pas du fait d'utiliser des sprites 2D ou 3D , mais de la façon dont on programme !! :)

ps : il a ete programme en purebasic v 3.93 !!!
tout dépends ce qu'on fait. Moi pour lethal judgment 4, le jeu est en 1024x768x32, gère parfois plus de 1000 sprites à l'ecran, 16 plans de scrollings parallaxes, des collisions à gérer de partout, des armes qui font tout l'ecran, + gestion du son, variables, ennemis ( une centaine différents à gérer ), ect.... et bien je peux te dire que en utilisant massivement les sprites3d tu ralentit grandement la chose.
( j'ai fait le test ). Et pourtant je pense que mon moteur est optimisé ( demande à crystal qui a vu tourner 'TWo' avec le même moteur ).

C'est normal, les sprites3d sont des textures et donc le GPU doit beaucoup plus travailler pour les traiter ( couche DX ) même si on ne les transforment pas et qu'elles restent sur un plan 2d.
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

beauregard a écrit :
Polux a écrit : Mais bon, je crois qu'il faut surtout se focaliser sur le fait: " Pourquoi utiliser des sprites3d pour faire des choses faisaibles ( et plus facilement ) avec la commande sprite classique. Si c'est juste pour dire, mon jeu il utilise la 3d ( alors que c'est completement faux ) et j'ai la plus grosse, c'est domage... Si par contre, on les utilise pour égayer un jeu 2d ( effets divers ), je pense que c'est plus sage.
Enfin, chacun fait comme il veut :wink:
Pourquoi ?

Si j'ai utilisé uniquement des sprites3D avec Peur Basique, c'est parce que je me suis rendu compte que le décor, sous forme de labyrinthe, constitué de sprites classique faisait chuter le fps.
En mettant ce décor sous forme de sprites3D, tout est devenu fluide sur ma vieille machine !! Et voilà pourquoi je m'agite...

si le decor en sprites2D fait ramer ton code, c'est qu'il y a un souci quelque part... un labyrinthe 2D ne bouffe quasi rien en ressources... Voit plutôt du côté de ton code je pense.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Polux a écrit :
Dobro a écrit :mon pureNoide2 est un prg de casse brique dispo sur mon site
ici :
http://michel.dobro.free.fr/Purebasic/d ... noide2.zip

ce prg affiche plus de 1000 sprites en permanence a l'ecran
(entre les etoiles du fond,les briques, la balle, les gellules..ect ...)
dont certains sont en DisplayTransparentSprite()
le tout est en Sprite 2D , et c'est fluide aussi !! :D
pourtant j'ai choisi le mode screen-Window qui n'est pas une reference !

comme quoi je pense que cette histoire de fluidité ne viens pas du fait d'utiliser des sprites 2D ou 3D , mais de la façon dont on programme !! :)

ps : il a ete programme en purebasic v 3.93 !!!
tout dépends ce qu'on fait. Moi pour lethal judgment 4, le jeu est en 1024x768x32, gère parfois plus de 1000 sprites à l'ecran, 16 plans de scrollings parallaxes, des collisions à gérer de partout, des armes qui font tout l'ecran, + gestion du son, variables, ennemis ( une centaine différents à gérer ), ect.... et bien je peux te dire que en utilisant massivement les sprites3d tu ralentit grandement la chose.
( j'ai fait le test ). Et pourtant je pense que mon moteur est optimisé ( demande à crystal qui a vu tourner 'TWo' avec le même moteur ).

C'est normal, les sprites3d sont des textures et donc le GPU doit beaucoup plus travailler pour les traiter ( couche DX ) même si on ne les transforment pas et qu'elles restent sur un plan 2d.

on dit la meme chose !!

j'ai bien ecrit "Le tout est en Sprite 2D" dans mon purenoide :D
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Polux a écrit :De plus, en utilisant massivement les sprites3d, et donc le GPU de la carte graphique tu vas te heurter à un autre souci: les différences entre ATI et NVIDIA ( pilotes compris ) qui parfois donnent du fil à retordre ( regarde, peur panique ne veut pas démarrer sur un pc pourtant haut de gamme à mon taf ).
Et bien là, il s'agit d'une réelle source d'inquiétude non ? Il faudrais le signaler à Fred pour le problème sprites3D/ATI.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Polux a écrit : si le decor en sprites2D fait ramer ton code, c'est qu'il y a un souci quelque part... un labyrinthe 2D ne bouffe quasi rien en ressources... Voit plutôt du côté de ton code je pense.
bon, je vais revoir mon code alors, merci pour vos précieux témoignages.
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

C'est pareil pour tous les jeux que ce soit pure ou pas pure. certains daignent pas fonctionner sur de l'ati ou mal.

Pourquoi toujours vouloir remettre en cause le langage ?

Tous les gens qui te répondent ici sont des codeurs expérimentés en purebasic, crois moi les tests ils en ont fait.

Je dis comme pollux, en sprite si c'est bien fait tu ne dois pas ramer et surtout pas avec un labyrinthe.

Regardes lethal ca rame pas un pet et pourtant il y en a du sprites, et les sprites 3D sont utilisés pour les effets uniquement.

C'est ce que je dis plus haut, les sprites3D sont rapides mais il ne faut pas en abuser. Leur structure est bien plus complexe et servent surtout pour faire des effets. Il est donc logique qu'à grand échelle, tu ralentis car ils demandent plus de ressources.

Après tout dépend comment tu codes comme dit Dobro.

Pour en revenir à Two, effectivement le moteur c'est de la bombe et les effets sont magnifiques, et pas besoin de tout mettre en sprite3D, c'est parfaitement fluide.

Maintenant comme dis polux si c'est pour dire mon jeu c'est tout du sprite3D et même que ca rame pas et que c'est moi qui ai la plus grosse, aucun interêt.
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

Dobro a écrit :
Polux a écrit :
Dobro a écrit :mon pureNoide2 est un prg de casse brique dispo sur mon site
ici :
http://michel.dobro.free.fr/Purebasic/d ... noide2.zip

ce prg affiche plus de 1000 sprites en permanence a l'ecran
(entre les etoiles du fond,les briques, la balle, les gellules..ect ...)
dont certains sont en DisplayTransparentSprite()
le tout est en Sprite 2D , et c'est fluide aussi !! :D
pourtant j'ai choisi le mode screen-Window qui n'est pas une reference !

comme quoi je pense que cette histoire de fluidité ne viens pas du fait d'utiliser des sprites 2D ou 3D , mais de la façon dont on programme !! :)

ps : il a ete programme en purebasic v 3.93 !!!
tout dépends ce qu'on fait. Moi pour lethal judgment 4, le jeu est en 1024x768x32, gère parfois plus de 1000 sprites à l'ecran, 16 plans de scrollings parallaxes, des collisions à gérer de partout, des armes qui font tout l'ecran, + gestion du son, variables, ennemis ( une centaine différents à gérer ), ect.... et bien je peux te dire que en utilisant massivement les sprites3d tu ralentit grandement la chose.
( j'ai fait le test ). Et pourtant je pense que mon moteur est optimisé ( demande à crystal qui a vu tourner 'TWo' avec le même moteur ).

C'est normal, les sprites3d sont des textures et donc le GPU doit beaucoup plus travailler pour les traiter ( couche DX ) même si on ne les transforment pas et qu'elles restent sur un plan 2d.

on dit la meme chose !!

j'ai bien ecrit "Le tout est en Sprite 2D" dans mon purenoide :D
vi vi c'est vrai :D
mais ce n'etait pas pour te contredire ;) bien au contraire, le quote appuyait le reste ;)
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

beauregard a écrit :
Polux a écrit : si le decor en sprites2D fait ramer ton code, c'est qu'il y a un souci quelque part... un labyrinthe 2D ne bouffe quasi rien en ressources... Voit plutôt du côté de ton code je pense.
bon, je vais revoir mon code alors, merci pour vos précieux témoignages.
si j'ai le temps je te posterai ici un code de labyrinthe 2d
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

ca c'est une bonne idée :)
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Crystal Noir a écrit :Maintenant comme dis polux si c'est pour dire mon jeu c'est tout du sprite3D et même que ca rame pas et que c'est moi qui ai la plus grosse, aucun interêt.
heuuu, c'est la 3ème fois que je le dis, mais au risque de me répéter donc, au départ j'utilisai sur mon PC récent des sprites classiques + sprites 3D (pour le fantome quoi). Et là tout est fluide, tout va bien.

Une fois fini, je teste ce jeu sur ma vielle machine, et là patatras, ça rame. Alors je cherche, je cherche encore, encore un peu, oui, voilà, je le tiens ! Ce sont ces sprites classique qui sont la cause me suis je dis. Alors je les remplace par des sprites 3D, et là c'est fluide.

Alors, hop, emballé c'est pesé, j'l met sur le forum.

Mon objectif n'est pas de prouver avec arrogance que je fais mieux que mon prochain, mais mon cheminement en programmant avec pb m'a amené à penser, heu, voir les posts précedent.

Mon objectif est de réaliser un jeu, et je cherche tout simplement les bons outils, sans chercher querelle.
Dernière modification par beauregard le lun. 06/août/2007 12:52, modifié 1 fois.
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

Purebasic est un excellent outil et pour moi (et pour les avoir tous testé) le meilleur concernant la 2D (et je parle pour les outils spécialisés comme pure).

Chaque outil a ses avantages et inconvénients mais le plus complet que j'ai pu voir ce jour c'est pure.

En revanche il est pas le plus facile et il est très capricieux :D
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Polux a écrit : si j'ai le temps je te posterai ici un code de labyrinthe 2d
:D
merci.
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

Code : Tout sélectionner

InitSprite():InitKeyboard()

OpenScreen(1024,768,32,"Laby2D") ;16x12 sprites de 64x64

CreateSprite(0,64,64) ; creation d'un sprite bidon pour le mur
StartDrawing(SpriteOutput(0))
  Box(0,0,64,64,RGB(255,255,255))
StopDrawing()  

Structure murs ; structure pour utiliser une liste chainée
  flag.w
EndStructure
Global NewList murflag.murs():Global n.w,i.w,o.w
; les listes chainées sont très rapides et optimisées

Restore labyby ; on rempli la liste
For i=1 To 192
  Read o
  AddElement(murflag())
    murflag()\flag=o
Next i

Repeat

ClearScreen(0)
i=0:n=0
ResetList(murflag()) ; affichage du tableau
While NextElement(murflag())  ; on balaye la liste
  If murflag()\flag=1:DisplaySprite(0,i*64,n*64):EndIf
  i+1:If i=16:i=0:n+1:EndIf ; on décale si besoin est
Wend

FlipBuffers()

ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)

DataSection ; section data pour le tableau

labyby:
Data.w 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data.w 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.w 1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1
Data.w 1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,1
Data.w 1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,1
Data.w 1,0,1,0,0,1,0,1,1,1,0,0,0,0,0,1
Data.w 1,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1
Data.w 1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
Data.w 1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,1
Data.w 1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
Data.w 1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
Data.w 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

EndDataSection
un p'tit code tout con pour l'affichage d'un tableau de labyrinthe 2d. Fait en 3minutes ;).. 50 lignes à tout peter.
Il faut bien sur améliorer plein de choses, rajouter un perso, des collisions.. a toi de jouer ;)
je rajouterai des trucs, optimiserait et posterait le résultat ici.
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

@beauregard (marrant le pseudo)

Bon, je ne suis pas tres jeux mais voila ce que ca donne avec une carte AGP Nvidia Geforce 6600 256ko ram :

Resolution ecran : 1024x768

000-100 59 fps
100-200 58-59 fps
200-270 57-58 fps bizarrement, c'est apres 270 que ca se gate
270-275 35-40 fps qu'est ce que je disais
275-300 29 fps alors la c'est la degringolade, ca commence a ramer serieusement

Resolution ecran : 1680x1050

000-100 58-59 fps
100-200 57-59 fps
200-240 56-58 fps bizarrement, idem ici, c'est apres 240 que ca se gate
240-245 29-30 fps qu'est ce que je disais
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é...

J'ai un peu modifié ton code pour coller a la resolution de l'ecran...

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

Répondre