[OK]probleme avec un displaySprite dans mon code

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

[OK]probleme avec un displaySprite dans mon code

Message par Bernie »

Bonjour
j'ai une erreur dans mon code à cette ligne :

Code : Tout sélectionner

DisplaySprite(\Id,\PosX,\PosY)
le message me dit que le #sprite n'est pas initialisé



;

Code : Tout sélectionner

--- Initilisation 
EnableExplicit
UsePNGImageDecoder() 
UseOGGSoundDecoder()

If  InitSprite()=0 Or InitKeyboard()=0 Or InitSound()=0
  MessageRequester("Erreur", "Impossible d'initialiser le jeux ")
  End
EndIf

;--- Les Constantes 
Enumeration Windows
  #Main_Window
EndEnumeration 

Enumeration Games
  #Etoile0
  #Etoile1
EndEnumeration  


;--Structure pour les infos des étoiles, du vaisseau , des invaders et des tirs lasers
Structure NewSprite
  PosX.i
  PosY.i
  Vitesse.i
  Id.b
 EndStructure  


;--- Gestion des étoiles 
;---Nombre d'étoiles
#MaxEtoiles= 99
;---Création d'un tableau pour les  étoiles du scrolling 
Global Dim etoiles.NewSprite(#MaxEtoiles)

;--- Variables globales diverses
Global gEvent,gWidth=800,gHeight=600,gI

;---Création de la surface du jeu
OpenWindow(#Main_Window,0,0,gWidth,gHeight,"INVADERS ",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Window),0,0,gWidth,gHeight)

;---Les procédures 

;---Dessins des é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 grise
  StartDrawing(SpriteOutput(#Etoile1))
  Box(0, 0, 2, 2, $A9A9A9)
  StopDrawing()
EndProcedure  

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

;--- Deplacement des étoiles
Procedure Deplacement()
  For gI = 0 To #MaxEtoiles
    With etoiles(gI)
      DisplaySprite(\Id,\PosX,\PosY)
         \PosY + \Vitesse
      If \PosY >= gWidth
        \PosY - gWidth
      EndIf
    EndWith
  Next
EndProcedure


;---Appelle des procedures 
CreationEtoiles()
Initialisation()

;---Boucle principale du jeux 
Repeat
Repeat
gEvent=WindowEvent()
Select gEvent
Case #PB_Event_CloseWindow
End
EndSelect
Until gEvent=0
;--- Partie 2D
ClearScreen(RGB(0, 0, 0))
Deplacement()
ExamineKeyboard()
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
End
Dernière modification par Bernie le jeu. 21/avr./2016 18:50, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: probleme avec un displaySprite dans mon code

Message par falsam »

Regarde ton énumération de sprite.
#Etoile0 sera = 0
#Etoile1 sera = 1

hors tu initialises tes étoles aléatoirement avec

Code : Tout sélectionner

Random(2,1)
Donc avec les valeurs 1 ou 2.

Remplace par

Code : Tout sélectionner

Random(1)
afin d'obtenir 0 ou 1 et ça fonctionnera.

Tes codes sont de plus en plus structurés. C'est bien plus clair. Bravo.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: probleme avec un displaySprite dans mon code

Message par Bernie »

merci falsam j'avais plus pensé à ça du tout
je regroupe dans la meme structure les etoiles ,le vaisseau les ennemis et les tirs et je mets pas mal de commentaires
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [OK]probleme avec un displaySprite dans mon code

Message par blendman »

Bernie, tu as 2 erreurs dans ta procédure Initialisation():

Code : Tout sélectionner

Procedure Initialisation()
  With etoiles(gI)
    For gI = 0 To #MaxEtoiles
      \PosY = Random(gHeight)
      \PosX = Random(gWidth,0)
      \Id = Random(2,1)
      \Vitesse = Random(8,2)
    Next   
  EndWith
EndProcedure
La première relevée par falsam. La seconde, tu place le with à l'extérieur de ta boucle, donc tu n'initialises que pour Gi=0

Tu devrais faire ceci :

Code : Tout sélectionner

Procedure Initialisation() 
    For gI = 0 To #MaxEtoiles
      With etoiles(gI)
        \PosY = Random(gHeight)
        \PosX = Random(gWidth,0)
        \Id = Random(2,1)
        \Vitesse = Random(8,2)
      EndWith
    Next 
EndProcedure
Là, tu initialiseras pour gI =0 to #MaxEtoiles ;)
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: [OK]probleme avec un displaySprite dans mon code

Message par Bernie »

merci blendeman de ton aide
Répondre