Page 1 sur 1

je cherche à faire en sorte que mon vaisseau ne sorte pas d

Publié : sam. 31/oct./2015 11:43
par Micheao
Bonjour

je cherche à faire en sorte que mon vaisseau ne sorte pas de l'écran
j'avais pensé à mettre 2 sprites de à gauche et à droite en redécoupant un morceau du background .
mais c'est peux etre pas la solution
Assets :
https://www.dropbox.com/s/ryk6j62k6amil ... e.zip?dl=0

Code : Tout sélectionner

;--Initialisation 
EnableExplicit
UseJPEGImageDecoder()
UsePNGImageDecoder()
InitSprite()
InitKeyboard()
InitMouse()
InitSound()

;--Constantes
Enumeration
  #Form_Game
  #Spr_Bg 
  #spr_Ship
  
  
EndEnumeration

;--Variables Globale 
Global  Event_Window,ShipX=350,ShipY=515


;--Création de la fenetre jeux 
OpenWindow(#Form_Game,0,0,800,600,"SpaceShoot",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Form_Game),0,0,800,600)
LoadSprite(#Spr_Bg,"Fond.jpg",#PB_Sprite_AlphaBlending)
LoadSprite(#spr_Ship,"Ship1.png",#PB_Sprite_AlphaBlending)






Repeat 
  
   

     Repeat   
  Event_Window=WindowEvent()
  Select Event_Window
    Case #PB_Event_CloseWindow
      End
  EndSelect
Until Event_Window=0
DisplaySprite(#Spr_Bg, 0, 0)
;Affichage du vaisseau
  DisplayTransparentSprite(#spr_Ship,ShipX,ShipY)
  ExamineKeyboard()
   ;---Touche pour faire bouger de gauche à droite le vaisseau
   If KeyboardPushed(#PB_Key_Left)
     ShipX-5
   EndIf
   If KeyboardPushed(#PB_Key_Right)
   ShipX+5
EndIf
   FlipBuffers()

ClearScreen(RGB(0, 0, 0))

  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)  
    

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : sam. 31/oct./2015 12:14
par microdevweb
C'est pourtant pas compliqué

Code : Tout sélectionner

If KeyboardPushed(#PB_Key_Left) And (ShipX-5)>=0
      ShipX-5
EndIf
If KeyboardPushed(#PB_Key_Right) And (ShipX+5)<= ScreenWidth()
   ShipX+5
EndIf

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : sam. 31/oct./2015 14:24
par Micheao
Merci microdevweb

malheureusement à droite le vaisseau sort encore de l'écran alors que à gauche ça marche il sort pas de l'écran

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : sam. 31/oct./2015 17:32
par falsam

Code : Tout sélectionner

  ;---Touche pour faire bouger de gauche à droite le vaisseau
  If KeyboardPushed(#PB_Key_Left) And ShipX-5 >= 0
    ShipX-5
  EndIf
  
  If KeyboardPushed(#PB_Key_Right) And ShipX + SpriteWidth(#spr_Ship) <= ScreenWidth()
    ShipX+5
  EndIf
ça va fonctionner.

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : sam. 31/oct./2015 17:39
par Micheao
Merci falsam ça marche bien je continue mon jeu

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : sam. 31/oct./2015 18:18
par falsam
Micheao a écrit :Merci falsam ça marche bien je continue mon jeu
De rien.

Les points x et y de coordonnées d'un sprite représente le coin haut gauche d'un sprite.

Un petit code bien commenter pour te montrer ce qu'il se passe quand tu affiche un sprite et que tu le déplaces à gauche ou à droite.

Le point rouge du sprite représente les coordonnées x et y du sprite. Regarde le titre de la fenêtre.

Code : Tout sélectionner

Enumeration
  #MainForm
EndEnumeration

Enumeration sprite
  #Sprite
EndEnumeration

x = 400
y = 300

InitSprite() : InitKeyboard() : InitMouse()


;Creation du screen
OpenWindow(#MainForm, 0, 0, 800, 600, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#MainForm), 0, 0, 800, 600)

CreateSprite(#Sprite, 60, 60)
StartDrawing(SpriteOutput(#Sprite))
Circle(4, 4, 2, RGB(255, 0, 0))
StopDrawing()

Repeat
  Repeat
    Event = WindowEvent()
     
    Select Event    
      Case #PB_Event_CloseWindow
        End
    EndSelect  
  Until Event=0
  
  ;La position x et y correspond au coin Haut Gauche du sprite
  DisplaySprite(#Sprite, x, y)
    
  FlipBuffers()
  ClearScreen(RGB(135, 206, 235))
  ExamineKeyboard()
    
  ;Le sprite se déplace à gauche de 5 pixels
  ;On vérifie que ce déplacement de - 5px sera > 0
  If KeyboardPushed(#PB_Key_Left) And x-5 >= 0
    x - 5
  EndIf
  
  ;Le sprite se déplace à droite de 5 pixels
  ;Le point de coordonnées x y étant le coin Haut Gauche su sprite
  ;On vérifie que ce déplacement de + 5px + largeur du sprite sera <= à la largeur de l'écran
  
  ; On utilisera :
  ; - SpriteWidth() pour calculer la largeur du sprite.
  ; - ScreenWidth() pour calculer la largeur de l'ecran. 
  If KeyboardPushed(#PB_Key_Right) And x + 5 + SpriteWidth(#Sprite) <= ScreenWidth()
    x + 5
  EndIf
  
  ;Affichage des coordonnées du sprite dans le titre de la fenetre.
  SetWindowTitle(0, "x: " + Str(x) + " y: " + Str(y))
  
Until KeyboardPushed(#PB_Key_Escape)
Bravo pour ce début de jeu :)

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : sam. 31/oct./2015 22:02
par Micheao
UN grand merci pour ton cours Mon ami

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : lun. 02/nov./2015 22:28
par Micheao
Bonsoir

Dis moi falsam as tu des conseils pour que j’améliore mon code ?

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : mar. 03/nov./2015 1:54
par falsam
Micheao a écrit :Dis moi falsam as tu des conseils pour que j’améliore mon code ?
Le code en l'état est pas mal.

Sinon tu peux par exemple ajouter un scrolling vertical de ton background avec l'utilisation du module lixu.pbi.

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : mar. 03/nov./2015 10:15
par Micheao
falsam a écrit :
Micheao a écrit :Dis moi falsam as tu des conseils pour que j’améliore mon code ?
Le code en l'état est pas mal.

Sinon tu peux par exemple ajouter un scrolling vertical de ton background avec l'utilisation du module lixu.pbi.
Salut Falsam

est ce que avec lixu.pbi on peux crée un Starfield?

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : mar. 03/nov./2015 11:16
par Ar-S
Tu as un topic dédié et des exemples à télécharger sur la page de lixu. Il te permet de mettre en place plus simplement des choses qui sont faisable en PB (L'animation d'un sprite, le scrolling, les particules etc..).

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : mar. 03/nov./2015 11:44
par Micheao
Ar-S a écrit :Tu as un topic dédié et des exemples à télécharger sur la page de lixu. Il te permet de mettre en place plus simplement des choses qui sont faisable en PB (L'animation d'un sprite, le scrolling, les particules etc..).
Merci 'jai lu le topic mais je voulais savori si on peux crée un Starfield avec Lixu?

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : mar. 03/nov./2015 11:48
par falsam
Micheao a écrit :Merci 'jai lu le topic mais je voulais savori si on peux crée un Starfield avec Lixu?
Oui tu peux.

Télécharge lixu.pbi et essayes ce code

Code : Tout sélectionner

;Lixu - Effet StarField

IncludeFile "lixu.pbi"

InitSprite()
InitKeyboard()
InitMouse()

UseModule lixu

OpenWindow(0, 0, 0, 1024, 768, "Lixu Particle", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 1024, 768)

;Create particles emitter
lixu::EmitterCreate("starfield", #PB_Particle_Point)
lixu::ParticleRate("starfield", 150)
lixu::ParticleColorsRange("starfield", RGB(255, 0, 0), RGB(0, 0, 255), 10)
lixu::ParticleSizeRange("starfield", 15, 50)
lixu::ParticleSpeedRange("starfield", -3, -3, 3, 3)
lixu::ParticleTimeToLife("starfield", 600)

;Events Loop
Repeat
  Repeat
    Event = WindowEvent()
     
    Select Event    
      Case #PB_Event_CloseWindow
        End
    EndSelect  
  Until Event=0
    
  
  ClearScreen(RGB(0, 0, 0))
  ExamineKeyboard()
  ExamineMouse()
  
  ;Play emitter
  lixu::EmitterPlay("starfield", ScreenWidth()/2, ScreenHeight()/2)
  
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
C'est un premier essai suite à ta demande :wink:

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : mar. 03/nov./2015 13:00
par blendman
Micheao a écrit :des conseils pour que j’améliore mon code ?
salut

voici quelques petits conseils :
1) attention à ne pas mélanger tes constantes. Ici, tu utilises la même énumération pour la fenêtre et les sprites. PEut-être que tu devrais séparer ça si par la suite, tu utilises plus de sprites.
2) il vaut mieux toujours vérifier que tout s'initialise correctement.
Tu dois toujours vérifier ce qui peut être vérifié.
Par exemple :

Code : Tout sélectionner

if InitSprite() = 0
  MessageRequester("erreur","impossible d'initialiser directX")
  end
endif
à vérifier :
InitSprite(), InitKeyboard(), InitMouse(), OpenWindow(), OpenWindowedScreen(), CreateSprite(), LoadSprite(), LoadImage(), etc...

3) Examinekyeboard.
je ne suis pas sûr que le deuxième examinekeyboard soit nécessaire dans ton code.

Normalement ton code pourrait ressembler à ça :

Code : Tout sélectionner

;--Initialisation

EnableExplicit
UseJPEGImageDecoder()
UsePNGImageDecoder()
If InitSprite() =0
    MessageRequester("Erreur", "Impossible de charger directX")
    End
EndIf
If InitKeyboard() = 0
    MessageRequester("Erreur", "Impossible de charger le clavier")
    End
EndIf


;--Constantes
#Form_Game = 0
Enumeration   
    #Spr_Bg
    #spr_Ship  
EndEnumeration

;--Variables Globale
Global Event_Window,ShipX=350,ShipY=515


;--Création de la fenetre jeux
If OpenWindow(#Form_Game,0,0,800,600,"SpaceShoot",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)=0
    MessageRequester("Erreur", "Impossible d'ouvrir la fenêtre.")
    End
EndIf
If OpenWindowedScreen(WindowID(#Form_Game),0,0,800,600)=0
    MessageRequester("Erreur", "Impossible d'ouvrir l'écran.")
    End
EndIf
If LoadSprite(#Spr_Bg,"Fond.jpg",#PB_Sprite_AlphaBlending) = 0
    MessageRequester("Erreur", "Impossible de charger l'image Fond.jpg")
    End
EndIf
If LoadSprite(#spr_Ship,"Ship1.png",#PB_Sprite_AlphaBlending) = 0
    MessageRequester("Erreur", "Impossible de charger l'image Ship1.png")
    End
EndIf

Repeat
    
    Repeat   
        Event_Window=WindowEvent()
        Select Event_Window
            Case #PB_Event_CloseWindow
                End
        EndSelect
    Until Event_Window=0
    
    DisplaySprite(#Spr_Bg, 0, 0)
    ;Affichage du vaisseau
    DisplayTransparentSprite(#spr_Ship,ShipX,ShipY)
    
    If ExamineKeyboard()
        ;---Touche pour faire bouger de gauche à droite le vaisseau
        If KeyboardPushed(#PB_Key_Left) and ShipX>5
            ShipX-5
        EndIf
        If KeyboardPushed(#PB_Key_Right) and ShipX<ScreenWidth()+SpriteWidth(#spr_Shi)
            ShipX+5
        EndIf
    EndIf
    FlipBuffers()
    ClearScreen(RGB(0, 0, 0))
Until KeyboardPushed(#PB_Key_Escape)

Re: je cherche à faire en sorte que mon vaisseau ne sorte p

Publié : mar. 03/nov./2015 14:19
par Micheao
Un grand merci à vous 2 pour vos conseils