Page 1 sur 1

[Ok]Petit probleme avec une constante

Publié : ven. 25/mars/2016 17:47
par Bernie
Bonjour
j'ai repris un tuto ( excellent) de Ar/s
Si j’écris les constantes comme ceci :

Code : Tout sélectionner

Enumeration Sprites 
  #Text_Titre
  #Text_Ombre
  #Etoile0
  #Etoile1
EndEnumeration
ça marche pas j'ai un message d'erreur en ligne 85

mais j'ai écris comme ça les constantes ( voir le code en dessous) là ça marche parfaitement .

j'aimerai bien savoir pourquoi quand on rajoute une nouvelle constante aprés voir écris le code , est que qu'il faut la mettre toujours en dessous des autres constantes ?

Merci d'avance pour votre aide
Bernard

Code : Tout sélectionner

;**** Space Shooter ****
;*** Code by JBernard  Mars 2016 ***

EnableExplicit

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

;--Constantes--
Enumeration Form
  #Main_Form
EndEnumeration

Enumeration Sprites 
  #Text_Titre
  #Etoile0
  #Etoile1
 #Text_Ombre
EndEnumeration

;--Variable globales
Global gI,gW=800,gH=600,gEventWindow,gFont1,gFont2
;--Nombre d'étoiles 
#MaxEtoiles= 99
;--Chargement de la police pour les textes
gFont1 = LoadFont(0, "Arial", 50, #PB_Font_Bold )

;--Structure pour les infos des étoiles
Structure etoile
  PosX.i
  PosY.i
  Vitesse.i
  Id.b
EndStructure

;--Création d'un tableau pour nos étoiles
Global Dim etoiles.etoile(#MaxEtoiles)

;--Les procédures
Procedure CreateText()
  
  CreateSprite(#Text_Titre,600,100,#PB_Sprite_AlphaBlending) 
  StartDrawing(SpriteOutput(#Text_Titre))
  DrawingMode(#PB_2DDrawing_AllChannels)
  Box(0,0,1090,80,RGBA(0,0,0,0))
  
  DrawingFont(gFont1)
  DrawText(20,10,"SPACE SHOOTER ",RGBA(255,255,255,255), RGBA(0,0,0,0));
  StopDrawing()
EndProcedure

;--On dessine les étoiles
Procedure CreationEtoiles()
  CreateSprite(#Etoile0,2,2)
  CreateSprite(#Etoile1,2,2)
  ;--Dessin de l'étoile blanche 
  StartDrawing(SpriteOutput(#Etoile0))
  Box(0, 0, 2, 2, $FFFFFF)
  StopDrawing()
  ;--Dessin de l'étoile rouge
  StartDrawing(SpriteOutput(#Etoile1))
  Box(0, 0, 2, 2, $0000FF)
  StopDrawing()
EndProcedure  

;-- Initialisation des paramètres de départ des étoiles
Procedure Initialisation()
  With etoiles(gI)
    For gI =0 To #MaxEtoiles
      \PosY = Random(gH)
      \PosX =Random(gW,0)
      \Id = Random(2,1) 
      \Vitesse = Random(8,2)
    Next 
  EndWith  
EndProcedure  



Procedure Deplacement()
  For gI =0 To #MaxEtoiles
    With etoiles(gI)
      DisplaySprite(\id, \PosX, \PosY)
      \PosY + \Vitesse
      If \PosY >=gW
        \PosY -gW
      EndIf
    EndWith
  Next    
EndProcedure   

;--- Création de la fenetre et de l'écran 
OpenWindow(#Main_Form,0,0,gW,gH,"Space Shooters ",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Form),0,0,gW,gH)
CreateText()

CreationEtoiles() 
Initialisation()

;--- Boucle du programme
Repeat  
  Repeat
    gEventWindow=WindowEvent()
    Select gEventWindow
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until gEventWindow=0
  ClearScreen(RGB(0, 0, 0)) ;En premier 
  
  ;Affichage des sprites 
  DisplayTransparentSprite(#Text_Titre, 100, 150)
  Deplacement()
  
  ExamineKeyboard()
  FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
End

Re: Petit probleme avec une constante

Publié : ven. 25/mars/2016 18:25
par Fig
bonjour Bernard,

Je me permets de te copier l'exemple de la documentation:

Code : Tout sélectionner

  Enumeration
    #GadgetInfo ; égale à 0
    #GadgetText ; égale à 1
    #GadgetOK   ; égale à 2
  EndEnumeration
Comme tu le vois, l'ordre est important car à chaque constante on affecte une valeur, en l'occurrence, la première 0 la seconde 1 etc...
Donc si tu change l'ordre, le programme rencontre un problème en se servant des mauvaises valeurs pour ces constantes.

Si tu fais ça:

Code : Tout sélectionner

  Enumeration
    #GadgetInfo ; égale à 0
    #GadgetOK   ; égale à 1 (et non 2 comme précédemment)
    #GadgetText ; égale à 2 (et non 1 comme précédemment)
  EndEnumeration
C'est clair ?

Re: Petit probleme avec une constante

Publié : ven. 25/mars/2016 18:56
par Bernie
Merci Fig
si j'ai bien compris si je veux rajouter une nouvelle constante une fois le code finie je la mets à la suite de l'autre .

Re: Petit probleme avec une constante

Publié : ven. 25/mars/2016 20:43
par Ar-S
Bernie a écrit :Merci Fig
si j'ai bien compris si je veux rajouter une nouvelle constante une fois le code finie je la mets à la suite de l'autre .
Du moment ou tu utilises les numéros des enumérations dans ton code la réponse est oui.

Re: Petit probleme avec une constante

Publié : ven. 25/mars/2016 23:58
par microdevweb
@Bernie,

Pour pouvoir reprendre une énumération à divers endroits du programme il faut la faire précédé d'un label

Exemple:

Code : Tout sélectionner

Enumeration Gadget
    #Gdg0
    #Gdg1
    #Gdg2
    #Gdg3
EndEnumeration
; Ici je reprend les énumération
Enumeration Gadget
    #Gdg4
EndEnumeration
Debug "Valeur #Gdg4  = "+Str(#Gdg4)
; La par contre je reprend une nouvelle énumération
Enumeration 
    #Gdg5
EndEnumeration
Debug "Valeur #Gdg5   ="+Str(#Gdg5)

Re: [Ok]Petit probleme avec une constante

Publié : sam. 26/mars/2016 10:05
par Bernie
Merci microdevweb pour ton explication