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

Programmation avancée de jeux en PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: me résiste

Message par Backup »

...........
Dernière modification par Backup le mar. 19/août/2014 13:28, modifié 1 fois.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

oreille douloureuse

Message par beauregard »

Maiiis, nonnnn, arrête ça fait maaal, nooon, et pis c'est pas ma faute, aîîiêuuuu ! :oops:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

:lol: :lol:
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

Cela dit programmer qu'avec des sprite3D ne fait pas économiser plus que cela bien au contraire si il y en a de trop. C'est pour cela que je pense qu'il est mieux de méler les deux genres suivant ce qu'on veut faire. Les sprites 3D sont supers pour faire des effets, mais il ne faut pas non plus en abuser, c'est pour cela que je pense que dans un jeu 2D il est bien de méler les deux et d'utiliser les sprite3D quand on en a besoin.
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

Dans mon moteur, les sprite3d ( grand consommateurs de ressources GPU ) ne sont là que pour les effets spéciaux ( lumières, halos, ect... ).
Il vaut effectivement mieux utiliser les sprites 2D pour tout le reste.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

quelles sont tes limites mon PC d'amour ?

Message par beauregard »

Bon, ben alors faut tester si je comprend bien. Et bien afin d'être définitivement fixé, j'ai décidé de maltraiter nos PC en testant ses limites avec des sprites d'une taille de 256*256, en mode graphique 32bit puis en 16 bit, le tout avec une résolution de 1024*768, résultat:

Avec un PC athlon 3500+ ( 2200Mhz), 1go ram, carte video 7600gs 256Mo
16bit:
--> 398 sprites3D sans la transparence
--> 398 sprites3D avec la transparence activée

32bit:
--> 398 sprites3D sans la transparence
--> 200 sprites3D avec la transparence activée



Avec un PC athlon XP( 1466Mhz) 1700+, 512Mo ram, carte video radeon 7000 serie 64 Mo
16bit:
--> 25 sprites3D sans la transparence
--> 25 sprites3D avec la transparence activée

32bit:
--> 11 sprites3D sans la transparence
--> 11 sprites3D avec la transparence activée



phénomène étrange:
Avec la petite carte, le fait de désactiver la transparence n'a pas d'impact.
Même chose avec la carte plus récente, mais uniquement pour le mode 16 bit.

1er conclusion: comme écrit dans la doc, cela dépend de la quantité de mémoire vidéo équipant nos cartes vidéo. Si un utilisateur de pb me lisant est équipé d'une carte de 512 Mo de ram vidéo (!), qu'il se manifeste pour confirmation.
Dernière modification par beauregard le lun. 06/août/2007 11:21, modifié 13 fois.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

et voici le petit code pour tester la machinerie:

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

Dernière modification par beauregard le lun. 06/août/2007 9:53, modifié 6 fois.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

ma conclusion est toujours la même: si avec une carte moyenne gamme de la génération précédente peut afficher tout ça, ben en extrapolant comme on dit, le développement d'un jeu de grande envergure ( mais en 2D et tout seul dans sa chambre) prenant environs 18 mois, et bien nous pouvons envisager sérieusement de concevoir un jeu en 1024*768 composer uniquement de sprite3D.

Mais l'expérience de Pollux étant des plus précieuse dans ce domaine, je doute quand même encore un peu, alors j'attend sa réaction et la votre avec une impatience non dissimulé.
Dernière modification par beauregard le lun. 06/août/2007 11:33, modifié 2 fois.
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

MAJ4 fonds d'écran (touche F1)

Message par Huitbit »

Super l'exemple pour les includes, je le met au chaud!

Pour les fonds d'écran, appuyez sur F1!
Dobro, Beauregard, j'ai mis vos fonds d'écran (et après, je les ai mixés juste pour voir!)

J'ai finalement rajouté la macro pour les changements de direction.
Ca fait beaucoup de paramètres mais on gagne pas mal de place!
changement_direction_clavier(#PB_Key_Right,1,0,0,0,1,1,0,0,1,-1,0,1,0,4,1,2,2,0)
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):
Ca marche pô! Mon ordi veut des datas!!!
(faudrait peut-être faire un post spécial comme ça tout le monde pourrait donner ses résultats)

[EDIT] j'ai mis le delay à 15 au lieu de 1 pour ménager l'UC (le FPS ne change quasiment pas mais l'utilisation de l'UC passe de 100% à moins de 20%!!!)

Hasta la vista!
Dernière modification par Huitbit le lun. 06/août/2007 20:58, modifié 1 fois.
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

si on utilise des sprites2D avec les Fx (et donc transparence) avec les instructions StartFx() ca va ramer c'est sur.

Mais il ne sert à rien de prendre des sprites3D c'est si juste faire avancer un simple sprite.

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.

Ensuite sprite3D avec sous sans transparence c'est pareil le sprite est géré de la même manière en fait c'est pour cela qu'il n'y a pas d'impact particulier.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

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.
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 :Mais il ne sert à rien de prendre des sprites3D c'est si juste faire avancer un simple sprite.
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 : 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.
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.

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).
Dernière modification par beauregard le lun. 06/août/2007 12:03, modifié 1 fois.
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

Les sprites 3d ne servent qu'aux effets spéciaux. Il est completement inutile de les utiliser pour un jeu complet ( on sature la mémoire vidéo et les instructions GPU pour rien ).
Un jeu comporte beaucoup d'autres variables à prendre en compte, telles que les collisions par exemple, qui ne seront pas gérées aussi facilement et précisement avec des sprites3d.
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 ).
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:
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message par Crystal Noir »

Je ne vois aucunement l'interet.

T'as fait un test ca rame pas et alors ?

Je ne dis pas que les sprites3D ne sont pas rapides, je dis simplement que ca bouffe plus de ressources qu'un sprite normal, ce qui est logique vu les effets possibles et la structure différente.

Maintenant, de ce fait pourquoi se faire chier avec des sprites3D si c'est juste pour faire avancer un sprite ? qu'est ce que cela change ? rien. Regardes mon début de pureboulder, tout est en sprite, est ce que ca rame pour autant ? non.

Donc maintenant si tu préfères tout coder en sprite3D, c'est ton choix, tu fais comme tu le sens, chacun est libre de coder comme il veut, mais moi j'vois pas pourquoi je me ferais chier avec des sprites 3D pour faire avancer une simple image, si les instructions sprites le font très bien et sans ramer. Ce qui me laisse des ressources supplémentaires pour le reste.

Maintenant je n'utilise pas pure pour démontrer ou faire exploser les performances d'un pc avec des sprites, je code pour m'amuser.

Maintenant +1 pour dobro. Sachant que les sprites3D ont une structure plus complexe et prennent plus de ressources c'est logique, pour l'alpha, les vertex, le coloring et j'en passe.

C'est pas vraiment une question de rapidité c'est juste dire, faire avancer un bonhomme tout con, autant utiliser les sprites tout court, mettre un sprite3D changera rien.
Dernière modification par Crystal Noir le lun. 06/août/2007 12:11, modifié 2 fois.
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

beauregard a écrit : Oui, mais à quel époque date cette affirmation de la doc ? )
- fred te le diras mieux que nous.
beauregard 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).
- 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 veux :wink: ( y a pas de rêgles, et ne detient LA méthode )... Le tout c'est que le jeu tourne correctement :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

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).


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 !!!
Répondre