Page 3 sur 4
Re: Flip sprite
Publié : ven. 02/nov./2018 8:44
par djes
boby a écrit :@Ollivier :
-Un système de colision performant avec quadtree.
-Un moteur physique.
-
La possibilitée d'uttiliser des shaders.
-une lib souris fonctionnel.
-Un système de palette.
-Un moteur de lumière (un vrai).
-La possibilitée d'avoir plusieurs caméra.
Bref je ne vais pas faire la liste surtout que je ne suis très certainement pas tombé sur tous les problèmes bloquant pour faire un JV.
En effet il y a de quoi afficher des choses à l'ecran (WOUHOU !!!) mais c'est pas suffisant pour faire un jeux vidéal (plus poussé qu'un tamagotchi teleteubbis).
Y'a qu'à voir, le seul jeu (complet) sorti sous pure c'est le fameux
Scavenger. J'ai beaucoup de respect pour la personne qui l'a fait, je sais qu'il l'a fait tout seul, mais ça n'empêche pas qu'ilsoit moche comme un cul et encore une fois, avec tout le respect que j'ai pour celui qui l'a fait, bah y'a pas franchement grand contenu pour un projet de 5 ans...
Non on avais pas juste envie de parler... Nous

Euh avec bgames on a sorti quelques jeux complets, et ils étaient loin d'être moches. La différence c'est que c'était à une autre époque, avant directx9, et on avait un meilleur contrôle de l'affichage 2D, bien supporté par pure à l'époque, et amélioré grâce à des bidouilles (je pense aux scrolls plein écran des lethal judgment).
À part ça, on a déjà tout dit sur ce sujet. PB permet de faire des jeux, mais le langage n'est pas tout. Un jeu c'est une idée, et du boulot. Pour arriver au bout du job, il faut une bonne détermination. Plus le jeu est complexe, plus il faut de travail, plus il faut de temps, plus il faut de détermination.
Sinon, pour avoir testé quelques plateformes, certaines sont plus adéquates que d'autres. Pour en mettre plein les mirettes, gérer très facilement des objets 3D, et surtout gagner du temps, il y a beaucoup mieux à mon avis, même si rien n'égale pb en terme de plaisir de coder.
Re: Flip sprite
Publié : sam. 03/nov./2018 11:44
par boby
Euh avec bgames on a sorti quelques jeux complets, et ils étaient loin d'être moches. La différence c'est que c'était à une autre époque, avant directx9
Ouais, avec l'unreal engine aussi on a sorti de beau jeux mais là non plus ça n'a pas trop de rapport, on parle de "quoi que c'est donc qu'il manquerai à pure aujourd'hui pour faciliter la création de jeux" et tu nous répond "Ouais alors y'a 72 ans, bah on pouvais faire des trucs hein !" J'ai du mal à bien capter le rapport...
À part ça, on a déjà tout dit sur ce sujet.
On ne te force pas à participer à l'échange d'idée et d'avis et même si, pour toi, tout a déjà été dit, en quoi ça te dérange qu'on en parle ici ? Dans la partie "Discussion générale" ??
Re: Flip sprite
Publié : sam. 03/nov./2018 13:59
par djes
Je sens un peu d'énervement. Sur un forum, il faut savoir garder son sang-froid... L'écrit est souvent mal interprété, surtout quand on n'est pas habitué à l'écriture des uns et des autres. Là, je voulais juste corriger une erreur, il n'y a pas eu qu'un seul jeu complet réalisé avec PB.
Maintenant je peux comprendre que ça peut être un peu agaçant quand les «vieux» rabâchent. On a déjà eu ce genre de conversation plein de fois, mais c'est vrai que ce n'est pas une raison pour ne plus l'avoir.
Re: Flip sprite
Publié : sam. 03/nov./2018 14:34
par Ollivier
Boby a écrit :@Ollivier
Enrichis-toi du partage des autres "Boby". Les critiques ne servent uniquement qu'assorties d'un ensemble suggestionnel solide.
Re: Flip sprite
Publié : sam. 03/nov./2018 16:09
par djes
Pour finir d'ajouter mon grain de sel, voici le sujet original qui explique l'astuce qui permet de faire le flip avec transformsprite() :
https://www.purebasic.fr/english/viewto ... =3&t=43718
Pour ceux que ça intéresse, ça explique aussi comment gérer l'ordre d'affichage des sprites en utilisant le z, puisqu'à la base, nos sprites sont des faces 3D...
Et enfin, voici un code un peu amélioré grâce à Danilo et qui n'utilise plus du tout d'assembleur.
Code : Tout sélectionner
; ***********************************************************************
; Project : FLIP SPRITE
; ORIGINAL CODE FROM : Comtois/thyphoon/djes/danilo
; UPGRADED BY : microdevWeb/djes
; ***********************************************************************
If Not InitSprite()
MessageRequester("Game engine error", "Cannot run sprite engine", #PB_MessageRequester_Error)
End
EndIf
If Not InitKeyboard()
MessageRequester("Game engine error", "Cannot run keyboard engine", #PB_MessageRequester_Error)
End
EndIf
If Not InitSound()
MessageRequester("Game engine error", "Cannot init sound engine", #PB_MessageRequester_Error)
End
EndIf
If Not OpenWindow(0, 0, 0, 800, 600, "Flippy bird", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
MessageRequester("Window engine error", "Cannot open window", #PB_MessageRequester_Error)
End
EndIf
If Not OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
MessageRequester("Game engine error", "Cannot open window screen", #PB_MessageRequester_Error)
End
EndIf
Import ""
PB_Screen_Direct3DDevice.IDirect3DDevice9
EndImport
Enumeration D3DCULL
#D3DCULL_NONE = 1
#D3DCULL_CW = 2
#D3DCULL_CCW = 3
EndEnumeration
; From https://docs.microsoft.com/en-us/windows/desktop/direct3d9/d3drenderstatetype
#D3DRS_ZENABLE = 7
#D3DRS_CULLMODE = 22
Procedure SetCullMode(MODE)
; MODE 0 = OFF
; MODE 1 = ON
If PB_Screen_Direct3DDevice
If MODE
PB_Screen_Direct3DDevice\SetRenderState(#D3DRS_CULLMODE, #D3DCULL_CCW)
Else
PB_Screen_Direct3DDevice\SetRenderState(#D3DRS_CULLMODE, #D3DCULL_NONE)
EndIf
EndIf
EndProcedure
Procedure ZEnable(MODE)
; MODE 0 = OFF
; MODE 1 = ON
If PB_Screen_Direct3DDevice
If MODE
PB_Screen_Direct3DDevice\SetRenderState(#D3DRS_ZENABLE, 1)
Else
PB_Screen_Direct3DDevice\SetRenderState(#D3DRS_ZENABLE, 0)
EndIf
EndIf
EndProcedure
SetCullMode(#False)
ZEnable(#False)
; FLIP FUNCTION
Procedure flipSprite(sprite, vertical.b, horizontal.b)
Protected w = SpriteWidth(sprite),
h = SpriteHeight(sprite)
If vertical And horizontal
; X3 X4
; ---
; | /|
; |/ |
; ---
; x2 x1
TransformSprite(sprite, w, h, 0, h, 0, 0, w, 0)
ProcedureReturn
EndIf
If vertical
; X4 X3
; ---
; | /|
; |/ |
; ---
; x1 x2
TransformSprite(sprite, 0, h, w, h, w, 0, 0, 0)
ProcedureReturn
EndIf
If horizontal
; X2 X1
; ---
; | /|
; |/ |
; ---
; x3 x4
TransformSprite(sprite, w, 0, 0, 0, 0, h, w, h)
ProcedureReturn
EndIf
; default sprite vertices
; X1 X2
; ---
; | /|
; |/ |
; ---
; x4 x3
TransformSprite(sprite, 0, 0, w, 0, w, h, 0, h)
EndProcedure
#PB_SPRITE1 = 0
; load pureBasic Sprite
LoadSprite(#PB_SPRITE1, #PB_Compiler_Home + "examples/sources/Data/PureBasic.bmp")
Global gEvent, gExit.b, gHorizontal.b, gVertical.b, gKeyPushed.b
Repeat ; game loop
Repeat ; window loop
gEvent = WindowEvent()
If gEvent = #PB_Event_CloseWindow
gExit = #True ; exit to game loop
Break ; exit to window loop
EndIf
Until gEvent = 0
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
gExit = #True ; exit to game loop
EndIf
If KeyboardPushed(#PB_Key_Right) And Not gKeyPushed
; reverse horizontal flip
gHorizontal = ~ gHorizontal
gKeyPushed = #True
EndIf
If KeyboardPushed(#PB_Key_Up) And Not gKeyPushed
; reverse vertical flip
gVertical = ~ gVertical
gKeyPushed = #True
EndIf
If KeyboardReleased(#PB_Key_All)
gKeyPushed = #False
EndIf
ClearScreen(0)
StartDrawing(ScreenOutput())
DrawText(0, 0, "Press Up and Right keys to flip")
StopDrawing()
flipSprite(#PB_SPRITE1, gVertical, gHorizontal)
DisplayTransparentSprite(#PB_SPRITE1, 100, 100)
FlipBuffers()
Until gExit
End
Re: Flip sprite
Publié : sam. 03/nov./2018 19:41
par TazNormand
Un article sur ShmupEmAll intéressant (qui date un peu certes) puisqu'il s'agit d'une interview de Polux et Djes à propos de bGames et de leurs jeux

Re: Flip sprite
Publié : dim. 04/nov./2018 11:09
par microdevweb
boby a écrit :
Ouais, avec l'unreal engine aussi on a sorti de beau jeux mais là non plus ça n'a pas trop de rapport, on parle de "quoi que c'est donc qu'il manquerai à pure aujourd'hui pour faciliter la création de jeux" et tu nous répond "Ouais alors y'a 72 ans, bah on pouvais faire des trucs hein !" J'ai du mal à bien capter le rapport...
Pour ma part réaliser un jeu sans un éditeur de niveau est archaïque et trop peux productif, réaliser un éditeur de niveau en pb serait évidement faisable mais demanderais un somme de travail considérable surtout que pb n'est pas objet.
Donc à part utiliser les possibilités de ogre la bibliothèque 2d est vraiment à la traîne et je penses pas que cela soit prêt de changer.
Re: Flip sprite
Publié : dim. 04/nov./2018 15:37
par SPH
microdevweb a écrit :Pour ma part réaliser un jeu sans un éditeur de niveau est archaïque et trop peux productif, réaliser un éditeur de niveau en pb serait évidement faisable mais demanderais un somme de travail considérable surtout que pb n'est pas objet.
Heu, on peux tout faire avec PB. J'ai fais un jeu et un editeur de niveau , et ca a ete facile !
@Djes : ton code est long; ce qui me fait dire que je prefererais une instruction simple codé par la team de pb; genre : FlipSprite(1,4)
Re: Flip sprite
Publié : dim. 04/nov./2018 17:39
par boby
SPH a écrit :Heu, on peux tout faire avec PB. J'ai fais un jeu et un editeur de niveau , et ca a ete facile !
Alors pour ma part je me suis lancé dans un tout petit jeux en pb pour voir ce dont le language était capable, j'en suis actuelement à 3200 lignes (dont 200 pour le netcode (qui en est tout juste au début)) sur ces 3000 lignes je dirais que 2000 sont des lib que je doit faire dès que je veux afficher quelque chose et je n'ai pas encore fini de coder les menus ! (Donc pas 1 lignes concernant le jeu lui même).
Si tu parle de ton scrabble, evidament pure est capable de ça, mais un jeux sans un minimum de feedback et de designe responsive, c'est pas ce que j'appel un "jeu".
Rien qu'afficher du text pure n'en est pas capable ! A quel moment tu peux dire qu'on peux faire un jeu sans text ???
Pour ma part je rejoint totalement microdevweb, pure est un très bon language pour du soft, mais obsolète pour du jeu.
Re: Flip sprite
Publié : dim. 04/nov./2018 19:19
par SPH
boby a écrit :Rien qu'afficher du text pure n'en est pas capable ! A quel moment tu peux dire qu'on peux faire un jeu sans text ???
J'ose croire que tu plaisantes...

Re: Flip sprite
Publié : lun. 05/nov./2018 10:29
par microdevweb
@SPH,
Je comprend que tu défendes Pb, mais à tu essayer essayé d'autres moteurs pour vraiment être réaliste.
Perso dans le cadre de formations j'ai réaliser un flappy - bird en Godot engine et cela à été assez simple et j'ai même peu compiler pour Pc et Android sans changer une ligne de code.
Exemple l'animation de l'explosion du bird, réaliser directement dans l'éditeur et sans aucune ligne de code si ce n'est à l’exception de son déclenchement.
Ui réaliser dans l"éditeur et les éléments se place automatiquement (même à l’agrandissement) de la fenêtre.
Ce projet reprend un niveau menu un niveau game avec des niveaux incrémentés.
La compilation pour Pc donne 2 fichiers une exe de 25.358 Ko et fichier pck de 5.028 ko et pour android un fichier apk de 18.859 Ko.
Pour ma formation pour Pb j'ai voulu réaliser le même projet.
Voici mes constations.
Pb ne gère pas la physique donc j'ai du réalisez moi même la chute de l'oiseau ainsi que sa montée cela fonctionne mais c'est moins fluide.
L'animation à du être également réalisée en code.
Les bûches ben déjà premier problème en rapport le sujet de ce topic, pas de fonction pour faire un flip de ma bûche (et faire une copie de l'image en miroir est à mon sens utopique)
Problème avec un son wav qui pourtant fonctionnait avec Godot, j'ai du en prendre un autre.
La je n'en suis qu'au début et me rend compte que si je poursuit je vais prendre 10 fois plus de temps de développement.
Pour les perf évidement difficile de comparer puisqu'il n'est pas terminé mais à première vue la taille devrait avoisiner les 7.000 ko donc nettement inférieur. (mais avec les pc actuel cela est t'il vraiment un véritable atout).
Donc et cela évidement est un choix personnel je ne choisirais jamais Pb pour la réalisation d'un jeu un minimum conséquent.
Re: Flip sprite
Publié : lun. 05/nov./2018 12:00
par Ar-S
SPH relevait l'affichage de texte, rien d'autre. Et ce dernier est évidement possible via drawtext.. je vois pas le soucis de ce coté.
Re: Flip sprite
Publié : lun. 05/nov./2018 14:14
par boby
Ar-S a écrit :SPH relevait l'affichage de texte, rien d'autre. Et ce dernier est évidement possible via drawtext.. je vois pas le soucis de ce coté.
SPH a écrit :J'ose croire que tu plaisantes...

Ahh mais si faire bosser le
CPU pour vos rendu graphique vous conviens, très bien, évidement quand je parle d'afficher du texte je parle coté GPU, par-ce qu'il y a des rumeurs qui courent comme quoi une carte graphique serait fait pour calculer les petits points lumineux sur vos écrans et que même qu'en plus qu'il parait qu'il serait, dans ce domaine de compétences, plus doué que le CPU, mais ça ne reste que de la rumeur hein...
Démonstration : lancez votre gestionnaire de tâche puis compilez ces 20 ÉNORMES !!! lignes (j'ai testé sur une machine moyenne "I5 2430M"; J'ai une moyenne de 7% CPU) pour afficher 5 lignes de text... WOUHOU !! Les PERFS !!! (Et je ne parle pas de l'absence de fonction de retour à la ligne, l'impossibilité d'afficher une ligne avec plusieurs couleurs j'en passe et des meilleurs.
Non SPH je ne plaisante pas...
Code : Tout sélectionner
InitSprite()
OpenWindow(0,0,0,600,400,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,600,400)
SetFrameRate(60)
LoadFont(0,"Arial",30)
LoadFont(1,"Arial",56)
Repeat
ClearScreen($FFFFFF)
StartDrawing(ScreenOutput())
DrawingFont(FontID(0))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(10,10,"BLA BLA du text !!",$000000)
DrawText(300-TextWidth("Du bla bla centré !")/2,50,"Du bla bla centré !",$CCFFCC)
DrawText(10,100,"Allé encore un pitipeut",$99CC33)
DrawText(10,150,"Je mets des couleurs au pif, ça va surement être moche",$CC7755)
DrawingFont(FontID(1))
DrawText(10,200,"Pour la forme une dernière",$112233)
StopDrawing()
FlipBuffers()
Until WindowEvent() = #PB_Event_CloseWindow
Re: Flip sprite
Publié : lun. 05/nov./2018 18:45
par Ollivier
@ "Boby"
Fais comme tout le monde, moi y compris : pose tes questions dans la section "Débutant".
Mesure les perfs de ce programme de 2015 (et encore,
je suis très loin d'être pionnier ) :
https://www.purebasic.fr/french/viewtop ... 8&start=41
Re: Flip sprite
Publié : lun. 05/nov./2018 18:57
par Ar-S
Bon ok y'a des lacunes. Mais je me fais un peu l'avocat du diable. On a déjà dit qu'une double boucle avait sont intérêt quand on mélangeait openwwindow et openwindowsscreen.
Ainsi en ajoutant le double repeat et un Event = WaitWindowEvent(10) on gagne encore en % proce
Enfin, tu crées non stop ton texte dans le screen. Je trouve que ça bouffe aussi anormalement de ressources, mais il suffit de le dessiner dans un sprite et d'afficher ce dernier.
Le cpu apprécie d'autant plus.
Avec ce code qui ressemble tout de même beaucoup au tien, je suis entre 0.8% et 1.2%
Code : Tout sélectionner
InitSprite()
F1 = LoadFont(0,"arial",30)
F2 = LoadFont(1,"arial",56)
OpenWindow(0,0,0,600,400,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,600,400)
CreateSprite(2,600,400)
StartDrawing(SpriteOutput(2))
Box(0,0,640,480,$ffffff)
DrawingFont(F1)
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(10,10,"BLA BLA du text !!",$000000)
DrawText(300-TextWidth("Du bla bla centré !")/2,50,"Du bla bla centré !",$CCFFCC)
DrawText(10,100,"Allé encore un pitipeut",$99CC33)
DrawText(10,150,"Je mets des couleurs au pif, ça va surement être moche",$CC7755)
DrawingFont(FontID(1))
DrawText(10,200,"Pour la forme une dernière",$112233)
StopDrawing()
SetFrameRate(60)
Repeat
Repeat
Event = WaitWindowEvent(10)
Select Event
Case #PB_Event_CloseWindow
End
EndSelect
Until Event=0
ClearScreen($FFFFFF)
DisplaySprite(2,0,0)
FlipBuffers()
Until WindowEvent() = #PB_Event_CloseWindow
Donc ok si un moteur 2D sortait un jour ce serai le gros pied. Mais faut pas cracher dans la soupe non plus.