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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message 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)  
    
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

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

Message 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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

Merci microdevweb

malheureusement à droite le vaisseau sort encore de l'écran alors que à gauche ça marche il sort pas de l'écran
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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.
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%
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

Merci falsam ça marche bien je continue mon jeu
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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 :)
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%
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

UN grand merci pour ton cours Mon ami
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

Bonsoir

Dis moi falsam as tu des conseils pour que j’améliore mon code ?
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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.
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%
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message 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?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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..).
~~~~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
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message 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?
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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:
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%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

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

Message 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)
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

Un grand merci à vous 2 pour vos conseils
Répondre