Dragon's fury(fallait pas l'énerver!):MAJ6 chgt de planches
Re: me résiste
...........
Dernière modification par Backup le mar. 19/août/2014 13:28, modifié 1 fois.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
oreille douloureuse
Maiiis, nonnnn, arrête ça fait maaal, nooon, et pis c'est pas ma faute, aîîiêuuuu ! 

- Crystal Noir
- Messages : 892
- Inscription : mar. 27/janv./2004 10:07
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.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
quelles sont tes limites mon PC d'amour ?
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.
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.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
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.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
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é.
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.
MAJ4 fonds d'écran (touche F1)
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!
(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!
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)
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):
(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.
- Crystal Noir
- Messages : 892
- Inscription : mar. 27/janv./2004 10:07
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.
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.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
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.
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.
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
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

- Crystal Noir
- Messages : 892
- Inscription : mar. 27/janv./2004 10:07
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.
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.
- 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).
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 !!

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 !!!