Mon 1er programme.... en 2D !! (drawtext ?)

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Mon 1er programme.... en 2D !! (drawtext ?)

Message par Ar-S »

ça y est, j'ai décidé de mettre les pieds dans le plat !
Y'en a marre, moi aussi je veux faire ma chipro de la balle qui tue :D
et pourquoi pas au final un jeu ! (bon c'est pas pour demain le jeu :mrgreen: :mrgreen:)

Donc je me lance dans mes 1ers essais 2D, un tout nouveau monde (plein de commandes que j'ai a peine survolée), mais qui m'enchante.
Voilà mon 1er petit code.. Je pense que je vais avoir besoin de connaisseurs sous peu :)

Monsieur Sprite se déplace de gauche à droite, tellement il est costaud, lorsqu'il touche le bout d'une fenêtre, il la déplace.
Lorsqu'il en a marre de se cogner (10x) il ferme le programme.

Code : Tout sélectionner

;Mon 1er test 2D / PB 4.40

InitSprite()
;position fenêtre
PosWinX=649
PosWinY=145

; Dimensions du personnage
Lcorps=50 : Hcorps=60 ; Dimension du corps
Ltete=Lcorps/2 ; Rayon de la tête donc 2 fois plus petit que la largeur du corps
Ljambe=15 : Hjambe=100 ; Dimension des jambes
Hsprite=Hcorps+Hjambe+Ltete*2 : Lsprite=Lcorps; Dimension du sprite entier, ces dimensions découle de la taille des parties du corps

; Positions
Xcorps=0 : Ycorps=Ltete*2
Xtete=Xcorps+Ltete 
XjambeG=Xcorps : Yjambe=Ycorps+Hcorps
XjambeD=Lcorps-Ljambe

; Autre paramettres
vitesse = 5
gauche=-vitesse
droite=vitesse
cogne=0

If OpenWindow(0, PosWinX, PosWinY, 400, Hsprite+20, "Window", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
  ButtonGadget(0, 0, Hsprite, Lsprite, 20, "Quitter")
  TextGadget(1,Lsprite+50,Hsprite+5,150,15,"BoOm :"+Str(cogne))
  If OpenWindowedScreen(WindowID(0), 0, 0, 400, Hsprite, 0, 0, 0)
    CreateSprite(0, Lsprite, Hsprite)
    If StartDrawing(SpriteOutput(0))
        Circle(Xtete, 25, Ltete, RGB(255, 0, 155)) ; tete
        Box(Xcorps, Ycorps, Lcorps, Hcorps, RGB(155, 0, 255)) ; Corps
        Box(XjambeG, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe gauche
        Box(XjambeD, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe droite
      StopDrawing()
    Else
      Debug "Error startdrawing"
    EndIf
  Else
    Debug "Error openwindowsscreen"
  EndIf 
Else
  Debug "Error openwindow"
EndIf

;{- Event loop
direction = droite
Repeat
  ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
  ;
  Repeat
    Event = WindowEvent()
    
    Select Event 
      Case #PB_Event_Gadget
        If EventGadget() = 0
          End
        EndIf
        
      Case #PB_Event_CloseWindow
        End 
    EndSelect
  Until Event = 0
  
  FlipBuffers() 
  ClearScreen(RGB(0, 0, 0))
  DisplaySprite(0, x, 0)
  x + direction
  If x > 400-Lsprite
    PosWinX=WindowX(0)+40
    ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore) 
    direction = gauche
    cogne+1
  EndIf
  
  If x < 0    
    PosWinX=WindowX(0)-40
    direction =  droite
    ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
    cogne+1
  EndIf
  SetGadgetText(1,"BoOm :"+Str(cogne))
  If cogne=10
    Break
  EndIf
  Delay(2)
ForEver

Dernière modification par Ar-S le sam. 23/janv./2010 17:07, modifié 1 fois.
~~~~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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Mon 1er programme.... en 2D !! tatataaaaa

Message par Ar-S »

J'auto double poste pour ma 1ere question

Si sous les cogne+1 j'ajoute vitesse+5, le bonhomme devrait doubler sa vitesse à chaque coup, hors je n'ai pas l'impression qu'il accelaire
pourtant le paramètre vitesse évolue bien..

ba pourquoi ??

Code : Tout sélectionner

;Mon 1er test 2D

Global gauche,droite,vitesse

InitSprite()
;position fenêtre
PosWinX=649
PosWinY=145

; Dimensions du personnage
Lcorps=50 : Hcorps=60 ; Dimension du corps
Ltete=Lcorps/2 ; Rayon de la tête donc 2 fois plus petit que la largeur du corps
Ljambe=15 : Hjambe=100 ; Dimension des jambes
Hsprite=Hcorps+Hjambe+Ltete*2 : Lsprite=Lcorps; Dimension du sprite entier, ces dimensions découle de la taille des parties du corps

; Positions
Xcorps=0 : Ycorps=Ltete*2
Xtete=Xcorps+Ltete 
XjambeG=Xcorps : Yjambe=Ycorps+Hcorps
XjambeD=Lcorps-Ljambe

; Autre paramettres
vitesse = 5
gauche=-vitesse
droite=vitesse
cogne=0

If OpenWindow(0, PosWinX, PosWinY, 400, Hsprite+20, "Window", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
  ButtonGadget(0, 0, Hsprite, Lsprite, 20, "Quitter")
  TextGadget(1,Lsprite+50,Hsprite+5,150,15,"BoOm :"+Str(cogne))
  If OpenWindowedScreen(WindowID(0), 0, 0, 400, Hsprite, 0, 0, 0)
    CreateSprite(0, Lsprite, Hsprite)
    If StartDrawing(SpriteOutput(0))
        Circle(Xtete, 25, Ltete, RGB(255, 0, 155)) ; tete
        Box(Xcorps, Ycorps, Lcorps, Hcorps, RGB(155, 0, 255)) ; Corps
        Box(XjambeG, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe gauche
        Box(XjambeD, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe droite
      StopDrawing()
    Else
      Debug "Error startdrawing"
    EndIf
  Else
    Debug "Error openwindowsscreen"
  EndIf 
Else
  Debug "Error openwindow"
EndIf

;{- Event loop
direction = droite
Repeat
  ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
  ;
  Repeat
    Event = WindowEvent()
    
    Select Event 
      Case #PB_Event_Gadget
        If EventGadget() = 0
          End
        EndIf
        
      Case #PB_Event_CloseWindow
        End 
    EndSelect
  Until Event = 0
  
  FlipBuffers() 
  ClearScreen(RGB(0, 0, 0))
  DisplaySprite(0, x, 0)
  x + direction
  If x > 400-Lsprite
    PosWinX=WindowX(0)+40
    ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore) 
    direction = gauche
    cogne+1
    vitesse+5
  EndIf
  
  If x < 0    
    PosWinX=WindowX(0)-40
    direction =  droite
    ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
    cogne+1
    vitesse+5
  EndIf
  SetGadgetText(1,"BoOm :"+Str(cogne)+" vitesse : "+Str(vitesse))
  If cogne=10
    Break
  EndIf
  Delay(2)
ForEver
~~~~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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Mon 1er programme.... en 2D !! tatataaaaa

Message par Le Soldat Inconnu »

Le calcul de gauche ou droite n'est pas rafraichi dans la boucle, et comme c'est gauche et droite qui donne le déplacement en fonction de la vitesse

Code : Tout sélectionner

    ;Mon 1er test 2D
		
    Global gauche,droite,vitesse
		
    InitSprite()
    ;position fenêtre
    PosWinX=649
    PosWinY=145
		
    ; Dimensions du personnage
    Lcorps=50 : Hcorps=60 ; Dimension du corps
    Ltete=Lcorps/2 ; Rayon de la tête donc 2 fois plus petit que la largeur du corps
    Ljambe=15 : Hjambe=100 ; Dimension des jambes
    Hsprite=Hcorps+Hjambe+Ltete*2 : Lsprite=Lcorps; Dimension du sprite entier, ces dimensions découle de la taille des parties du corps
		
    ; Positions
    Xcorps=0 : Ycorps=Ltete*2
    Xtete=Xcorps+Ltete
    XjambeG=Xcorps : Yjambe=Ycorps+Hcorps
    XjambeD=Lcorps-Ljambe
		
    ; Autre paramettres
    vitesse = 5
		gauche=-vitesse
    droite=vitesse
    cogne=0
		
    If OpenWindow(0, PosWinX, PosWinY, 400, Hsprite+20, "Window", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
      ButtonGadget(0, 0, Hsprite, Lsprite, 20, "Quitter")
      TextGadget(1,Lsprite+50,Hsprite+5,150,15,"BoOm :"+Str(cogne))
      If OpenWindowedScreen(WindowID(0), 0, 0, 400, Hsprite, 0, 0, 0)
        CreateSprite(0, Lsprite, Hsprite)
        If StartDrawing(SpriteOutput(0))
            Circle(Xtete, 25, Ltete, RGB(255, 0, 155)) ; tete
            Box(Xcorps, Ycorps, Lcorps, Hcorps, RGB(155, 0, 255)) ; Corps
            Box(XjambeG, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe gauche
            Box(XjambeD, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe droite
					StopDrawing()
				Else
          Debug "Error startdrawing"
				EndIf
			Else
        Debug "Error openwindowsscreen"
			EndIf
		Else
      Debug "Error openwindow"
		EndIf
		
    ;{- Event loop
    direction = droite
    Repeat
      ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
      ;
      Repeat
        Event = WindowEvent()
				
        Select Event
					Case #PB_Event_Gadget
            If EventGadget() = 0
              End
						EndIf
						
					Case #PB_Event_CloseWindow
            End
				EndSelect
			Until Event = 0
			
      FlipBuffers()
      ClearScreen(RGB(0, 0, 0))
      DisplaySprite(0, x, 0)
      x + direction
      If x > 400-Lsprite
        PosWinX=WindowX(0)+40
        ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
        cogne+1
        vitesse+5
				gauche = - vitesse
				direction = gauche
			EndIf
			
      If x < 0   
        PosWinX=WindowX(0)-40
        ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
        cogne+1
        vitesse+5
				droite = vitesse
				direction =  droite
			EndIf
      SetGadgetText(1,"BoOm :"+Str(cogne)+" vitesse : "+Str(vitesse))
      If cogne=10
        Break
			EndIf
      Delay(2)
		ForEver
		
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Mon 1er programme.... en 2D !! tatataaaaa

Message par Le Soldat Inconnu »

Pour le délire

Code : Tout sélectionner

    ;Mon 1er test 2D
		
    Global gauche,droite,vitesse
		
    InitSprite()
    ;position fenêtre
    PosWinX=649
    PosWinY=145
		
    ; Dimensions du personnage
    Lcorps=50 : Hcorps=60 ; Dimension du corps
    Ltete=Lcorps/2 ; Rayon de la tête donc 2 fois plus petit que la largeur du corps
    Ljambe=15 : Hjambe=100 ; Dimension des jambes
    Hsprite=Hcorps+Hjambe+Ltete*2 : Lsprite=Lcorps; Dimension du sprite entier, ces dimensions découle de la taille des parties du corps
		
    ; Positions
    Xcorps=0 : Ycorps=Ltete*2
    Xtete=Xcorps+Ltete
    XjambeG=Xcorps : Yjambe=Ycorps+Hcorps
    XjambeD=Lcorps-Ljambe
		
    ; Autre paramettres
    vitesse = 5
		gauche=-vitesse
    droite=vitesse
    cogne=0
		
    If OpenWindow(0, PosWinX, PosWinY, 400, Hsprite+20, "Window", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
      ButtonGadget(0, 0, Hsprite, Lsprite, 20, "Quitter")
      TextGadget(1,Lsprite+50,Hsprite+5,150,15,"BoOm :"+Str(cogne))
      If OpenWindowedScreen(WindowID(0), 0, 0, 400, Hsprite, 0, 0, 0)
        CreateSprite(0, Lsprite, Hsprite)
        If StartDrawing(SpriteOutput(0))
            Circle(Xtete, 25, Ltete, RGB(255, 0, 155)) ; tete
            Box(Xcorps, Ycorps, Lcorps, Hcorps, RGB(155, 0, 255)) ; Corps
            Box(XjambeG, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe gauche
            Box(XjambeD, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe droite
					StopDrawing()
				Else
          Debug "Error startdrawing"
				EndIf
			Else
        Debug "Error openwindowsscreen"
			EndIf
		Else
      Debug "Error openwindow"
		EndIf
		
    ;{- Event loop
    direction = droite
    Repeat
      ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
      ;
      Repeat
        Event = WindowEvent()
				
        Select Event
					Case #PB_Event_Gadget
            If EventGadget() = 0
              End
						EndIf
						
					Case #PB_Event_CloseWindow
            End
				EndSelect
			Until Event = 0
			
      FlipBuffers()
      ClearScreen(RGB(0, 0, 0))
      DisplaySprite(0, x, 0)
      x + direction
      If x > 400-Lsprite
        cogne+5
				PosWinX=WindowX(0)+cogne
        ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
        vitesse+1
				gauche = - vitesse
				direction = gauche
			EndIf
			
      If x < 0   
				cogne+5
        PosWinX=WindowX(0)-cogne
        ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
        vitesse+1
				droite = vitesse
				direction =  droite
			EndIf
      SetGadgetText(1,"BoOm :"+Str(cogne)+" vitesse : "+Str(vitesse))
      If cogne>=400
        Break
			EndIf
      Delay(2)
		ForEver
		
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Mon 1er programme.... en 2D !! tatataaaaa

Message par Ar-S »

Ok merci LSI
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Mon 1er programme.... en 2D !! tatataaaaa

Message par Backup »

dis donc, dis donc , t'aurai pas ete inspiré par mon prg intitulé
"Le poid des sprites" , ou je disais justement que la collision d'un sprite "lourds"
faisait bouger la fenetre

revoici le code de l'epoque : :)
( datant du 3/12/2005 !! )
http://www.purebasic.fr/french/viewtopi ... es+sprites

Code : Tout sélectionner



; connerie codé par Dobro
; Adapter en purebasic V4
#dobro =1
#Police =1
#Sprite =1




Structure sprite
    x.l
    y.l
    sensx.l
    sensy.l
EndStructure
Dim sprite.sprite(1)


; ***********************************
Resultat = InitSprite ()
FontID = LoadFont ( #Police , "arial" , 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_ ( #SM_CXSCREEN ): ;=largeur de l'ecran
EcranY = GetSystemMetrics_ ( #SM_CYSCREEN ): ;=hauteur de l'ecran
    WindowID = OpenWindow (1, 0, 0,320, 200, "click droit pour sortir", #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
    Result = OpenWindowedScreen ( WindowID (1) ,0,0, 320, 200, 1, 0,0)
    SetWindowColor(1, RGB(0,0,0))
    
    ; creation d'un Sprite
    CreateSprite (1, 64, 64)
    StartDrawing ( SpriteOutput (1) ) ; on dessine dedans
        Circle (32, 32, 32 , RGB ($FF,$FF,$0))
    StopDrawing ()
    
    
    Resultat = InitMouse ()
    sprite(1)\x=160
    sprite(1)\y=100
    sprite(1)\sensx=2
    sprite(1)\sensy=2
    
    Repeat
        ExamineMouse ()
        WindowEvent ()
        Delay (2)
        
        If MouseButton (2)
            End
        EndIf
        
        sprite(1)\x=sprite(1)\x+sprite(1)\sensx
        sprite(1)\y=sprite(1)\y+sprite(1)\sensy
        If sprite(1)\x<0
            sprite(1)\sensx=-sprite(1)\sensx
            xwin = WindowX (1)
            ywin = WindowY (1)
            ResizeWindow(1,xwin-10,ywin, #PB_Ignore , #PB_Ignore )
            beep_ (100,50)
        EndIf
        If sprite(1)\x>320-64
            sprite(1)\sensx=-sprite(1)\sensx
            xwin = WindowX (1)
            ywin = WindowY (1)
            ResizeWindow(1, xwin+10,ywin, #PB_Ignore , #PB_Ignore )
            beep_ (100,50)
        EndIf
        If sprite(1)\y>200-64
            sprite(1)\sensy=-sprite(1)\sensy
            xwin = WindowX (1)
            ywin = WindowY (1)
            ResizeWindow(1,xwin,ywin+10, #PB_Ignore , #PB_Ignore )
            beep_ (80,50)
        EndIf
        If sprite(1)\y<0
            sprite(1)\sensy=-sprite(1)\sensy
            xwin = WindowX (1)
            ywin = WindowY (1)
            ResizeWindow(1, xwin,ywin-10, #PB_Ignore , #PB_Ignore )
            beep_ (80,50)
        EndIf
        
        DisplaySprite (1, sprite(1)\x, sprite(1)\y)
        
        
        FlipBuffers (): ; affiche l'ecran
        ClearScreen (RGB(0, 0, 0)) : ;efface l'ecran
        
    Until Event= #PB_Event_CloseWindow 
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Mon 1er programme.... en 2D !! tatataaaaa

Message par Ar-S »

Salut Dobro, peut-être inconsciemment (ce qui est possible mais vu que j'ai rien posté sur ce post pas sûr), car là je n'ai utilisé que la doc pb :)
Pour apprendre faut que je fasse (ou refasse) tout sinon je retiens zbouby ;) (je crois que j'ai aussi le syndrome dit du kcc) :lol:

Edit : Mais t'inquiète pas, je vais surement employer des routine d'autres sources (des tiennes ou autres), mais une fois que j'aurai compris leur fonctionnement
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Mon 1er programme.... en 2D !! tatataaaaa

Message par Backup »

je ne m'inquietais pas que tu ais repris ou pas une de mes routines ,ma reflexion
concerne juste "l'idée"

tu sais, je suis un peu comme Atari , j'ai eu l'idée de pleins de conneries...
je revendique la paternité de l'idée , rien de plus :D

ici l'idée étant de bouger une fenêtre par rebond d'un sprite ;)

je suis deja intervenu sur différent post a propos du meme sujet , j'en veux a personne
mais j'aime bien rappeler que je suis l'initiateur de tel ou tel truc :)
un petit vice de vanité , rien de plus ;)

je suis plutot content que tu te mette a la 2D ,
pour avoir fait plusieurs projet avec toi, je sais que tu en a largement les capacités :)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Mon 1er programme.... en 2D !! tatataaaaa

Message par Ar-S »

Merci de ces encouragements, mais y'a du boulot.
par exemple là j'essaye de comprendre comment agencer plusieurs sprites dans la même fenetre.
Pour reprendre l'exemple précédent, j'ai ajouté un DrawText contenu dans le sprite numéro 1 (le 0 étant le bonhomme)

mais je ne le vois pas à l'écran...

la doc utilise un CreateImage, est-ce obligatoire ?

Code : Tout sélectionner

;Mon 1er test 2D - 4.40
; Ajout 'un Draw Text
Global gauche,droite,vitesse,Hfenetre,Lfenetre

InitSprite()


; Dimensions du personnage
Lcorps=50 : Hcorps=60 ; Dimension du corps
Ltete=Lcorps/2 ; Rayon de la tête donc 2 fois plus petit que la largeur du corps
Ljambe=15 : Hjambe=100 ; Dimension des jambes
Hsprite=Hcorps+Hjambe+Ltete*2 : Lsprite=Lcorps; Dimension du sprite entier, ces dimensions découle de la taille des parties du corps

; Positions
Xcorps=0 : Ycorps=Ltete*2
Xtete=Xcorps+Ltete 
XjambeG=Xcorps : Yjambe=Ycorps+Hcorps
XjambeD=Lcorps-Ljambe

;fenêtre
Lfenetre=400 : Hfenetre=600
PosWinX=649 : PosWinY=145

; Autre paramettres
vitesse = 15
gauche=-vitesse
droite=vitesse
cogne=0

If OpenWindow(0, PosWinX, PosWinY, Lfenetre, Hfenetre, "Window", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
  ButtonGadget(0, 0, Hfenetre-20, Lsprite, 20, "Quitter")
  TextGadget(1,Lsprite+50,Hfenetre-15,150,15,"BoOm :"+Str(cogne))
  If OpenWindowedScreen(WindowID(0), 0, 0, Lfenetre, Hfenetre-20, 0, 0, 0)
    
    CreateSprite(0, Lsprite, Hsprite)
    If StartDrawing(SpriteOutput(0))
        Circle(Xtete, 25, Ltete, RGB(255, 0, 155)) ; tete
        Box(Xcorps, Ycorps, Lcorps, Hcorps, RGB(155, 0, 255)) ; Corps
        Box(XjambeG, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe gauche
        Box(XjambeD, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe droite
      StopDrawing()
    EndIf
    CreateSprite(1,400,50)
    If StartDrawing(SpriteOutput(1))
        DrawText(150, 50, "Je suis du texte dans un sprite", RGB(255,0,255)) 
      StopDrawing()
    EndIf  
  EndIf
EndIf

;{- Event loop
direction = droite
Repeat
  ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
  ;
  Repeat
    Event = WindowEvent()
    
    Select Event 
      Case #PB_Event_Gadget
        If EventGadget() = 0
          End
        EndIf
        
      Case #PB_Event_CloseWindow
        End 
    EndSelect
  Until Event = 0
  
  FlipBuffers() 
  ClearScreen(RGB(0, 0, 0))
  DisplaySprite(1, 50, 50)
  DisplaySprite(0, x, Hfenetre-Hsprite)
  x + direction
  If x > Lfenetre-Lsprite
    PosWinX=WindowX(0)+40
    ;ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore) 
    direction = gauche
    cogne+1
  EndIf
  
  If x < 0    
    PosWinX=WindowX(0)-40
    direction =  droite
    ;ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
    cogne+1
  EndIf
  SetGadgetText(1,"BoOm :"+Str(cogne)+" vitesse : "+Str(vitesse))
  
  Delay(2)
ForEver
~~~~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
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Mon 1er programme.... en 2D !! (drawtext ?)

Message par Guimauve »

Bonjour à tous,

Je viens de tester le code et j'ai trouvé un bogue, dans Linux si on déplace la fenêtre et bien le "Screen" se détache de la fenêtre. Si non pour le reste ça l'air d'aller.

A+
Guimauve
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Mon 1er programme.... en 2D !! (drawtext ?)

Message par Backup »

bon soluce :

mais deja lis la ligne 21 ;)

Code : Tout sélectionner

;Mon 1er test 2D - 4.40
; Ajout 'un Draw Text
Global gauche,droite,vitesse,Hfenetre,Lfenetre

InitSprite()


; Dimensions du personnage
Lcorps=50 : Hcorps=60 ; Dimension du corps
Ltete=Lcorps/2 ; Rayon de la tête donc 2 fois plus petit que la largeur du corps
Ljambe=15 : Hjambe=100 ; Dimension des jambes
Hsprite=Hcorps+Hjambe+Ltete*2 : Lsprite=Lcorps; Dimension du sprite entier, ces dimensions découle de la taille des parties du corps

; Positions
Xcorps=0 : Ycorps=Ltete*2
Xtete=Xcorps+Ltete
XjambeG=Xcorps : Yjambe=Ycorps+Hcorps
XjambeD=Lcorps-Ljambe

;fenêtre
; **************** Merci pour ceux qui ont un ecran different du tiens !!!!! ********************
Lfenetre=GetSystemMetrics_(#SM_CXSCREEN)  ; recup la resolution de l'ecran en cours
Hfenetre=GetSystemMetrics_(#SM_CYSCREEN)
; *************************************************************************************
PosWinX=649 : PosWinY=145

; Autre paramettres
vitesse = 15
gauche=-vitesse
droite=vitesse
cogne=0

If OpenWindow(0, PosWinX, PosWinY, Lfenetre, Hfenetre, "Window", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ButtonGadget(0, 0, Hfenetre-20, Lsprite, 20, "Quitter")
    TextGadget(1,Lsprite+50,Hfenetre-15,150,15,"BoOm :"+Str(cogne))
    If OpenWindowedScreen(WindowID(0), 0, 0, Lfenetre, Hfenetre-20, 0, 0, 0)
        
        CreateSprite(1, Lsprite, Hsprite)
        If StartDrawing(SpriteOutput(1))
                Circle(Xtete, 25, Ltete, RGB(255, 0, 155)) ; tete
                Box(Xcorps, Ycorps, Lcorps, Hcorps, RGB(155, 0, 255)) ; Corps
                Box(XjambeG, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe gauche
                Box(XjambeD, Yjambe, Ljambe, Hjambe, RGB(55, 100, 255)) ; jambe droite
            StopDrawing()
        EndIf
       
         CreateSprite(0,400,50)
        If StartDrawing(SpriteOutput(0))
                DrawText(1, 5, "Je suis du texte dans un sprite", RGB(255,0,255))
            StopDrawing() 
        EndIf 
    EndIf
EndIf

;{- Event loop
direction = droite
Repeat
    ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
    ;
    Repeat
        Event = WindowEvent()
        
        Select Event
            Case #PB_Event_Gadget
                If EventGadget() = 0
                    End
                EndIf
                
            Case #PB_Event_CloseWindow
                End
        EndSelect
    Until Event = 0
    
    FlipBuffers()
    ClearScreen(RGB(0, 0, 0))
    DisplaySprite(0, 50, 50)
    DisplaySprite(1, x, Hfenetre-Hsprite)
    x + direction
    If x > Lfenetre-Lsprite
        PosWinX=WindowX(0)+40
        ;ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
        direction = gauche
        cogne+1
    EndIf
    
    If x < 0   
        PosWinX=WindowX(0)-40
        direction =  droite
        ;ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
        cogne+1
    EndIf
    SetGadgetText(1,"BoOm :"+Str(cogne)+" vitesse : "+Str(vitesse))
    
    Delay(2)
ForEver

explication !

de memoire les sprites s'affichent les uns apres les autres suivant leur Ordre d'affichage
(Merci Cederavic )
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: Mon 1er programme.... en 2D !! (drawtext ?)

Message par cederavic »

De memoire tu te goure completement sur ce coup Dobro :P
C'est l'ordre d'utilisation de DisplaySprite qui defini l'ordre d'affichage :)
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: Mon 1er programme.... en 2D !! (drawtext ?)

Message par cederavic »

Un code parle mieu qu'un long discour :

Code : Tout sélectionner

InitSprite()
InitKeyboard()
OpenWindow(0, 0, 0, 640, 480, "Dobro arrete PB, c'est triste :(", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  OpenWindowedScreen(WindowID(0), 0, 0, 640, 480, 0, 0, 0)
  CreateSprite(0, 128, 128)
  StartDrawing(SpriteOutput(0))
    Box(0, 0, 128, 128, #Red)
    DrawText(24, 24, "Sprite 0", #White)
  StopDrawing()
  CreateSprite(1, 128, 128)
  StartDrawing(SpriteOutput(1))
    Box(0, 0, 128, 128, #Blue)
    DrawText(24, 24, "Sprite 1", #White)
  StopDrawing()
  Repeat
    ClearScreen(#Black)
    DisplaySprite(0, 12, 12)
    DisplaySprite(1, 64, 64)
    
    DisplaySprite(1, 300, 12)
    DisplaySprite(0, 348, 64)
    FlipBuffers()
    ExamineKeyboard()
  Until KeyboardPushed(#PB_Key_All)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Mon 1er programme.... en 2D !! (drawtext ?)

Message par Backup »

oui ! tu as raison , seul l'ordre d'affichage compte !! :) :oops:

je viens de tester chez moi vite fait !!

j'arrete donc le purebasic a partir de maintenant !! :cry:
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: Mon 1er programme.... en 2D !! (drawtext ?)

Message par cederavic »

T'inquiet pas, tu sera revenu plus vite que tu ne sera parti :P
Répondre