Page 2 sur 2

Re: [2D] DisplayProgressBar()

Publié : mer. 04/mai/2016 15:48
par Marc56
Ar-S a écrit :@Marc56 : En effet c'est étonnant !
Essaye peut-être de réinstaller directX si tes pilotes graphiques sont à jour.
(truc tout con mais vérifie que ton cable ecran/carte graph est bien enfoncé)
Je viens de lancer dxdiag: aucun problème détecté. Par contre je suis en 11.2

Code : Tout sélectionner

          DirectX Version: 11.2
      DX Setup Parameters: Not found
         User DPI Setting: Using System DPI
       System DPI Setting: 96 DPI (100 percent)
          DWM DPI Scaling: Disabled
                 Miracast: Not Available
Microsoft Graphics Hybrid: Not Supported
           DxDiag Version: 10.00.10586.0000 64bit Unicode

------------
DxDiag Notes
------------
      Display Tab 1: No problems found.
        Sound Tab 1: No problems found.
          Input Tab: No problems found.
Je pensais avoir remis la 9 à un moment. Une mise à jour a dû repasser la 11 :?:

Re: [2D] DisplayProgressBar()

Publié : mer. 04/mai/2016 17:24
par Ar-S
je pense que tu dois avoir le 9 aussi.
Essaye peut êtr de le re télecharger.

Re: [2D] DisplayProgressBar()

Publié : mer. 04/mai/2016 22:29
par microdevweb
@Bernie,

Je suis heureux que tu aie compris et ceci avant un aide quelconque. Tous le monde à du débuter et quelque fois demander de l'aide.

Le tout c'est que tu attrape le déclic car le principe reste le même et cela même pour pour des codes plus complexes.

Re: [2D] DisplayProgressBar()

Publié : dim. 08/mai/2016 21:42
par Bernie
Bonsoir

j'ai essayer crée quelque chose avec la barre de vie ça marche presque sauf que j'arrive pas à faire détruire l'ennemi :

Code : Tout sélectionner

;---- petite démo avec une barre de vie 

;--- Initilisation 
EnableExplicit
If InitSprite()=0 Or InitKeyboard()=0 
  MessageRequester("Erreur", "Impossible d'initialiser le programme ")
  End
EndIf

;---Constantes
Enumeration Windows
  #Main_Windows
EndEnumeration 
Enumeration Sprites
  #Player
  #Ennemy
  #Tir
EndEnumeration
;--- Structure d'info pour le sprite du joueur , le  tir du joueur et l'ennemi 
Structure NewSprite
  Posx.i
  Posy.i
  Sprite.i
  Life.i
 EndStructure
 
 ;---Gestion du tir  
Global NewList Tir.NewSprite(),gShootReady=#True,gShootTime
;--- Gestion du joueur
Global Player.NewSprite
;--- Gestion de l'ennemi 
Global Ennemy.NewSprite
;---Gestion de la barre de vie 
Global  gValue.i,gMaximum.i,gLife.i,gLifeMaxi.i,gLifeBar.i
;---Variables globale
Global  gEvent, gWidth=800, gHeight=600

;--- Declaration de la procedure pour la barre de vie 
Declare DisplayProgressBar(Sprite,x,y,gValue, gMaximun)



;--- Création de la surface du jeux 
OpenWindow(#Main_Windows,0,0,gWidth,gHeight,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Windows),0,0,gWidth,gHeight)
SetWindowTitle(#Main_Windows,"Test de Barre de Vie    "+ "  touche Spacebar pour le tir")


;--- Dessin du sprite du joueur 
CreateSprite(#Player,40,40)
StartDrawing(SpriteOutput(#Player))
Box(0, 0, 40, 40, RGB(255, 0, 0))
StopDrawing()

;--- Dessin du sprite de l'ennemi 
CreateSprite(#Ennemy,110,110)
StartDrawing(SpriteOutput(#Ennemy))
Circle(50,50,50,RGB(30, 144, 255))
StopDrawing()

;--- Dessin du sprite du tir du joueur
CreateSprite(#Tir,20,30)
StartDrawing(SpriteOutput(#Tir))
Box(0, 0, 5, 10, RGB(255, 255, 255))
StopDrawing()

;--- Création de la barre de vie
gLifeMaxi = 250
gLife.i = gLifeMaxi
gLifeBar = CreateSprite(#PB_Any, 200, 24)

;--- Création du joueur 
Player\Posx=370
Player\Posy=530

;--- Création de l'ennemi 
Ennemy\Posx=350
Ennemy\Posy=10
Ennemy\Life=250



;--- Boucle du programme 
Repeat
  Repeat
    ;--- Pour la fenetre   
gEvent = WindowEvent()
Select gEvent
Case #PB_Event_CloseWindow
End
EndSelect
Until gEvent=0

;---  Pour la partie 2D 
ClearScreen(RGB(0, 0, 0))
;-- Affichage de la barre de vie( On appelle notre procédure) 
DisplayProgressBar(gLifeBar, 20, 20, gLife, gLifeMaxi)

;--- Affichage du sprite du joueur 
  DisplaySprite(#Player,Player\Posx,Player\Posy)
   ;---Affichage du sprite de l'ennemi 
    DisplaySprite(#Ennemy,Ennemy\Posx,Ennemy\Posy)

     
  ;---Affichage des tirs du joueur
  ForEach Tir()
    Tir()\Posy-2
    If Tir()\Posy<0
      FreeSprite(Tir()\Sprite)
      DeleteElement(Tir(),#True)
    Else
      DisplayTransparentSprite(Tir()\Sprite,Tir()\Posx,Tir()\Posy)
      ;--- Collision  avec le tir et l'ennemi 
      If Ennemy\Life>0 And SpriteCollision(#Ennemy,Ennemy\Posx,Ennemy\Posy,Tir()\Sprite,Tir()\Posx,Tir()\Posy)
        FreeSprite(Tir()\Sprite)
        DeleteElement(Tir(),#True)
        ;--- barre de vie
        If gLife>0
          gLife-10
          Ennemy\Life-10
         ElseIf Ennemy\Life=0
          FreeSprite(#Ennemy)
          EndIf
        
      
      EndIf

    EndIf
  Next 
  

  
  
  
  ExamineKeyboard()
  
  ;--- Si on appuie sur la barre d'espacement on tir sur l'ennemi 
  If KeyboardPushed(#PB_Key_Space) And gShootReady=#True
    AddElement(Tir())
    Tir()\Sprite=CopySprite(#Tir,#PB_Any)
  Tir()\Posx=Player\Posx+SpriteWidth(#Player)/2-SpriteWidth(Tir()\Sprite)/2
  Tir()\Posx=390
  Tir()\Posy= 510
  gShootTime=ElapsedMilliseconds()
EndIf
If ElapsedMilliseconds()-gShootTime>300
  gShootReady=#True
Else
  gShootReady=#False
EndIf

FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End

;---Procédure pour la barre de vie 

Procedure DisplayProgressBar(Sprite, x, y, gValue, gMaximum)
  ;--- Variables de cette procédure : 
  Protected Width.i = SpriteWidth(Sprite)
  Protected Height.i = SpriteHeight(Sprite)
  Protected Coef.f = Width/gMaximum
  Protected Index.i = gValue * Coef
  Protected Text.s, TextWidth.i, TextHeight.i
  
  StartDrawing(SpriteOutput(Sprite))
  DrawingMode(#PB_2DDrawing_Transparent)
  ;---Dessin du fond
  Box(0, 0, Width, Height, RGB(128, 128, 128))
  ;---Dessin de l'index
  Box(0, 0, Index, Height, RGB(255, 0,0))
  ;--Dessin du pourcentage
  Text = Str(100 * Index / gMaximum / Coef) + "%"
  TextWidth = TextWidth(Text)
  TextHeight= TextHeight(Text)
  DrawText((Width - TextWidth)/2, (Height - TextHeight)/2, Text, RGB(255, 255, 255))
  ;--Dessin du contour
  DrawingMode(#PB_2DDrawing_Outlined)
  Box(0, 0, Width, Height, RGB(0, 0, 0))
  StopDrawing()
  ;--Affichage du sprite
  DisplaySprite(Sprite, x, y)
EndProcedure

Re: [2D] DisplayProgressBar()

Publié : dim. 08/mai/2016 22:23
par falsam
Je te laisse méditer sur ça et tu comprendra j’espère pourquoi l’ennemi est toujours afficher

Code : Tout sélectionner

;---Affichage du sprite de l'ennemi 
  Debug gLife
  DisplaySprite(#Ennemy,Ennemy\Posx,Ennemy\Posy)
Tu as un indice dans ma premiere phrase et un autre dans le code.

PS : SVP ne donner pas la solution à Bernie. Merci ^^

Re: [2D] DisplayProgressBar()

Publié : lun. 09/mai/2016 0:25
par Huitbit
Hello,

Il y a 9 ans, j'avais posté un truc en utilisant clipsprite().
L'avantage c'est qu'on peut utiliser n'importe quel sprite pour la barre d'énergie (un billet de 500€ scanné :mrgreen: , une merguez,..etc).

http://purebasic.fr/french/viewtopic.ph ... re+energie

Image

Le code est toujours valable (il y a juste un 0 à remplacer par 1 dans le line)
L'idée, c'est le clipsprite() bien sûr, pas le code :wink:
(d'ailleurs, je l'ai utilisé dans "le Survivant")

Code : Tout sélectionner

;auteur Huitbit
;barre d'énergie avec clipsprite
;pb v4.02
;***************************************************
#largeur_barre=200
#hauteur_barre=#largeur_barre/10
InitSprite()

OpenWindow(0,0,0,#largeur_barre,2*#hauteur_barre,"barre d'énergie",#PB_Window_ScreenCentered|#PB_Window_SystemMenu  )
OpenWindowedScreen(WindowID(0),0,0,#largeur_barre,2*#hauteur_barre,1,0,0)

;dessin de la barre complète
CreateSprite(0,#largeur_barre,#hauteur_barre)
StartDrawing(SpriteOutput(0))
For  i=0 To #hauteur_barre/2
  Line(0,i,#largeur_barre,1,RGB(100+15*i,0,0))
  Line(0,i+#hauteur_barre/2,#largeur_barre,1,RGB(255-15*i,0,0))
Next i
For i = 1 To 9
  Line(#hauteur_barre*i,0,1,#hauteur_barre,RGB(100,100,100))
Next i
StopDrawing()

x=0;niveau d'énergie
dx=1;variation du niveau d'énergie
Repeat
  
  Repeat
    Event = WindowEvent()      
    If  Event = #PB_Event_CloseWindow
      End 
    EndIf
  Until Event = 0
  
  FlipBuffers() 
  ClearScreen(RGB(0, 0, 0))
  ClipSprite(0,0,0,x,#hauteur_barre);affichage partiel de la barre d'énergie 
  DisplaySprite(0, 0,10)
  
  x=x+dx
  If x>#largeur_barre Or x=<0
    dx=-dx
  EndIf
  
 ForEver
Voilà, c'était pour faire avancer le schmilblick !

Hasta la vista

Re: [2D] DisplayProgressBar()

Publié : lun. 09/mai/2016 6:27
par Micoute
Simple, mais efficace. Merci pour le partage Huitbit.

Re: [2D] DisplayProgressBar()

Publié : lun. 09/mai/2016 9:16
par Bernie
j'ai trouvé et ça marche :

Code : Tout sélectionner

   ;---- petite démo avec une barre de vie 

;--- Initilisation 
EnableExplicit
If InitSprite()=0 Or InitKeyboard()=0 
  MessageRequester("Erreur", "Impossible d'initialiser le programme ")
  End
EndIf

;---Constantes
Enumeration Windows
  #Main_Windows
EndEnumeration 
Enumeration Sprites
  #Player
  #Ennemy
  #Tir
EndEnumeration
;--- Structure d'info pour le sprite du joueur , le  tir du joueur et l'ennemi 
Structure NewSprite
  Posx.i
  Posy.i
  Sprite.i
  Life.i
 EndStructure
 
 ;---Gestion du tir  
Global NewList Tir.NewSprite(),gShootReady=#True,gShootTime
;--- Gestion du joueur
Global Player.NewSprite
;--- Gestion de l'ennemi 
Global Ennemy.NewSprite
;---Gestion de la barre de vie 
Global  gValue.i,gMaximum.i,gLife.i,gLifeMaxi.i,gLifeBar.i
;---Variables globale
Global  gEvent, gWidth=800, gHeight=600

;--- Declaration de la procedure pour la barre de vie 
Declare DisplayProgressBar(Sprite,x,y,gValue, gMaximun)



;--- Création de la surface du jeux 
OpenWindow(#Main_Windows,0,0,gWidth,gHeight,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Windows),0,0,gWidth,gHeight)
SetWindowTitle(#Main_Windows,"Test de Barre de Vie    "+ "  touche Spacebar pour le tir")


;--- Dessin du sprite du joueur 
CreateSprite(#Player,40,40)
StartDrawing(SpriteOutput(#Player))
Box(0, 0, 40, 40, RGB(255, 0, 0))
StopDrawing()

;--- Dessin du sprite de l'ennemi 
CreateSprite(#Ennemy,110,110)
StartDrawing(SpriteOutput(#Ennemy))
Circle(50,50,50,RGB(30, 144, 255))
StopDrawing()

;--- Dessin du sprite du tir du joueur
CreateSprite(#Tir,20,30)
StartDrawing(SpriteOutput(#Tir))
Box(0, 0, 5, 10, RGB(255, 255, 255))
StopDrawing()

;--- Création de la barre de vie
gLifeMaxi = 250
gLife.i = gLifeMaxi
gLifeBar = CreateSprite(#PB_Any, 200, 24)

;--- Création du joueur 
Player\Posx=370
Player\Posy=530

;--- Création de l'ennemi 
Ennemy\Posx=350
Ennemy\Posy=10
Ennemy\Life=250



;--- Boucle du programme 
Repeat
  Repeat
    ;--- Pour la fenetre   
gEvent = WindowEvent()
Select gEvent
Case #PB_Event_CloseWindow
End
EndSelect
Until gEvent=0

;---  Pour la partie 2D 
ClearScreen(RGB(0, 0, 0))
;-- Affichage de la barre de vie( On appelle notre procédure) 
DisplayProgressBar(gLifeBar, 20, 20, gLife, gLifeMaxi)

;--- Affichage du sprite du joueur 
  DisplaySprite(#Player,Player\Posx,Player\Posy)
   ;---Affichage du sprite de l'ennemi 
  If gLife>0
  DisplaySprite(#Ennemy,Ennemy\Posx,Ennemy\Posy)
EndIf
     
  ;---Affichage des tirs du joueur
  ForEach Tir()
    Tir()\Posy-2
    If Tir()\Posy<0
      FreeSprite(Tir()\Sprite)
      DeleteElement(Tir(),#True)
    Else
      DisplayTransparentSprite(Tir()\Sprite,Tir()\Posx,Tir()\Posy)
      ;--- Collision  avec le tir et l'ennemi 
      If Ennemy\Life>0 And SpriteCollision(#Ennemy,Ennemy\Posx,Ennemy\Posy,Tir()\Sprite,Tir()\Posx,Tir()\Posy)
        FreeSprite(Tir()\Sprite)
        DeleteElement(Tir(),#True)
        ;--- barre de vie
        If gLife>0
          gLife-10
          Ennemy\Life-10
         ElseIf Ennemy\Life=0 Or gLife=0 
           FreeSprite(#Ennemy)
            
           
         EndIf
        
      
      EndIf

    EndIf
  Next 
 


  
  
  
  ExamineKeyboard()
  
  ;--- Si on appuie sur la barre d'espacement on tir sur l'ennemi 
  If KeyboardPushed(#PB_Key_Space) And gShootReady=#True
    AddElement(Tir())
    Tir()\Sprite=CopySprite(#Tir,#PB_Any)
  Tir()\Posx=Player\Posx+SpriteWidth(#Player)/2-SpriteWidth(Tir()\Sprite)/2
  Tir()\Posx=390
  Tir()\Posy= 510

  gShootTime=ElapsedMilliseconds()
EndIf
If ElapsedMilliseconds()-gShootTime>300
  gShootReady=#True
Else
  gShootReady=#False
EndIf

FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End

;---Procédure pour la barre de vie 

Procedure DisplayProgressBar(Sprite, x, y, gValue, gMaximum)
  ;--- Variables de cette procédure : 
  Protected Width.i = SpriteWidth(Sprite)
  Protected Height.i = SpriteHeight(Sprite)
  Protected Coef.f = Width/gMaximum
  Protected Index.i = gValue * Coef
  Protected Text.s, TextWidth.i, TextHeight.i
  
  StartDrawing(SpriteOutput(Sprite))
  DrawingMode(#PB_2DDrawing_Transparent)
  ;---Dessin du fond
  Box(0, 0, Width, Height, RGB(128, 128, 128))
  ;---Dessin de l'index
  Box(0, 0, Index, Height, RGB(255, 0,0))
  ;--Dessin du pourcentage
  Text = Str(100 * Index / gMaximum / Coef) + "%"
  TextWidth = TextWidth(Text)
  TextHeight= TextHeight(Text)
  DrawText((Width - TextWidth)/2, (Height - TextHeight)/2, Text, RGB(255, 255, 255))
  ;--Dessin du contour
  DrawingMode(#PB_2DDrawing_Outlined)
  Box(0, 0, Width, Height, RGB(0, 0, 0))
  StopDrawing()
  ;--Affichage du sprite
  DisplaySprite(Sprite, x, y)
EndProcedure

     

Re: [2D] DisplayProgressBar()

Publié : lun. 09/mai/2016 9:59
par falsam
YeahhhhHHHhhhh il a trouvé. ^^ C'est beau un if quand c'est utilisé à A bon escient :wink:

Re: [2D] DisplayProgressBar()

Publié : lun. 09/mai/2016 10:22
par Bernie
et maintenant je suis entrain d'etudier le code de HuitBit

Re: [2D] DisplayProgressBar()

Publié : lun. 09/mai/2016 11:08
par Micoute
Bon début, merci pour le partage Bernie.

Re: [2D] DisplayProgressBar()

Publié : lun. 09/mai/2016 12:23
par Ar-S
falsam a écrit :YeahhhhHHHhhhh il a trouvé. ^^ C'est beau un if quand c'est utilisé à A bon escient :wink:
:mrgreen:

Tout à fait,
Bernie si tu as trouvé ça par toi même tu as eu LE déclic le plus important pour les conditions ;)

Re: [2D] DisplayProgressBar()

Publié : lun. 09/mai/2016 14:21
par Bernie
Ar-S a écrit :
falsam a écrit :YeahhhhHHHhhhh il a trouvé. ^^ C'est beau un if quand c'est utilisé à A bon escient :wink:
:mrgreen:

Tout à fait,
Bernie si tu as trouvé ça par toi même tu as eu LE déclic le plus important pour les conditions ;)
c'est grâce à vous que j'ai compris la 2D si tu regarde mon code ma structure Newsprite gère les tirs + le joueur et le boss .

Re: [2D] DisplayProgressBar()

Publié : ven. 17/juin/2016 8:45
par Marc56
Marc56 a écrit :Je viens de tester quelque exemples de la doc, et j'ai bien du blanc, mais toujours du rose/violet pour certains exemples du forum :| donc celui-ci
(Ce n'est pas traumatisant car je ne fais pas encore d'applications utilisant des sprites, mais c'est curieux)

NVIDIA GeForce GT 620
Windows 10 dit que les pilotes sont à jour.
Epilogue :)

Yes! solution trouvée! :o (en faisant autre chose) :mrgreen:
Ce matin, je teste par hasard, la jolie démo de Road Train par Comtois (impressionnant!)
http://www.purebasic.fr/english/viewtop ... 36&t=65970
Ça fonctionne très bien, sauf que l'image est toujours rose/marron, pas de blanc ni de gris, mais en plus elle est dédoublée en rose et bleu ?
Rose et bleu 8O :?: presque rouge et vert :!: tilt :idea: :idea: :idea: C'est pas DirectX, il doit y avoir un machin 3D activé dans le driver de ma carte vidéo ?!
(qui pourtant est un carte normale intégrée à la carte mère d'un HP i3, donc pas une machine dédiée jeux)

J'ouvre le panneau de configuration Nvidia:
Yes: Une section marquée 3D stéréoscopie était cochée! :!:
Je décoche, tout l'écran se met à trembler 1 seconde.
Je relance le road train: Plus de dédoublement 3D
Je relance les exemples PB: impeccable, le blanc est blanc et non plus rose! :P

Voilà. Hope this help
:wink:

Re: [2D] DisplayProgressBar()

Publié : ven. 17/juin/2016 9:02
par Zorro
c'est cool si tu avais le mode Anaglyphe Activé :)
il te suffisait d'avoir une paire de lunettes de ce genre :

http://lunettes-3d.fr/categorie/lunette ... aglyphes-6

comme les miennes :
Image

ps ; cela est en principe Cyan+Rouge , mais existe dans d'autre coloris (Green/magenta)
cependant, le model Cyan+rouge est le mieux adapté que les autres couleurs ...
parce que celles qui sont (Green/magenta) par exemple , empeche la visualisation des Verts
hors, dans la nature, des choses vertes il y en a plein (herbes, arbres,feuilles etc ... )

je ferme la parenthese culturelle :mrgreen:


ps2: mais on est hors sujet la non ?