Flip sprite

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Flip sprite

Message 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 :wink:
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.
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: Flip sprite

Message 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" ??
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Flip sprite

Message 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.
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Flip sprite

Message 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.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Flip sprite

Message 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
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Flip sprite

Message 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 :wink:
Image
Image
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Flip sprite

Message 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.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Flip sprite

Message 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 !
8)

@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)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: Flip sprite

Message 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.
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Flip sprite

Message 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 ???
Image

J'ose croire que tu plaisantes... 8O :?
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Flip sprite

Message 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.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Flip sprite

Message 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é.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: Flip sprite

Message 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... 8O :?
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
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Flip sprite

Message 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
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Flip sprite

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Verrouillé