si tu gere tes sprites avec une variable (meme structuré) comme numero de sprite , il est assez facile de gerer le Z !!
voici un petit exemple qui fait passer alternativement le rouge devant le jaune
Code : Tout sélectionner
; Dobro
; codé avec mon NC10 ;O)
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Erreur", "Le système de Sprite ne peut pas être initialisé", 0)
End
EndIf
Global Pas_x=2; cette variable indiquera le sens de deplacement x
Global Pas_y= 3; cette variable indiquera le sens de deplacement y
Global x2=10
Global x=400
Global Pas_x2=-2; cette variable indiquera le sens de deplacement x
Global Pas_y2= -3; cette variable indiquera le sens de deplacement y
Global largeur_ecran=GetSystemMetrics_(#SM_CXSCREEN); si purebasic demo mettre ici la taille X de votre resolution
Global hauteur_ecran=GetSystemMetrics_(#SM_CYSCREEN); si purebasic demo mettre ici la taille Y de votre resolution
If OpenScreen(largeur_ecran, hauteur_ecran, 32, "Visualisation")
; *********** creation et dessin d'un sprite *******************
CreateSprite(0,32,32)
StartDrawing(SpriteOutput(0))
Circle(16,16,16,RGB(255,255,15)) ; la tete
Circle( 10,10,5,RGB(0,250,255)); oeil gauche
Circle( 10,10,2,RGB(0,0,0)); pupille gauche
Circle( 22,10,5,RGB(0,250,255));oeil droit
Circle( 22,10,2,RGB(0,0,0)); pupille droite
Box (10,22,10,5,RGB(0,0,0)) ;bouche
Box (7,20,4,4,RGB(0,0,0));coin bouche gauche
Box (20,20,4,4,RGB(0,0,0));coin bouche droit
StopDrawing()
; ********************************************************
; *********** creation et dessin d'un sprite *******************
CreateSprite(1,32,32)
StartDrawing(SpriteOutput(1))
Circle(16,16,16,RGB(255,0,15)) ; la tete
Circle( 10,10,5,RGB(0,250,255)); oeil gauche
Circle( 10,10,2,RGB(0,0,0)); pupille gauche
Circle( 22,10,5,RGB(0,250,255));oeil droit
Circle( 22,10,2,RGB(0,0,0)); pupille droite
Box (10,22,10,5,RGB(0,0,0)) ;bouche
Box (7,20,4,4,RGB(0,0,0));coin bouche gauche
Box (20,20,4,4,RGB(0,0,0));coin bouche droit
StopDrawing()
; ********************************************************
Repeat
; On dessine nos Sprites
If a=1
DisplaySprite(0, x, hauteur_ecran/2)
DisplaySprite(1, x2, hauteur_ecran/2)
Else
DisplaySprite(1, x2, hauteur_ecran/2)
DisplaySprite(0, x, hauteur_ecran/2)
EndIf
; *** fait avancer notre sprite ***
x=x+Pas_x
y=y+Pas_y
x2=x2+Pas_x2
y2=y2+Pas_y2
; ****************************
; *** les tests pour surveiller les sorties d'ecran ***
If x>largeur_ecran -32; le sprite va sortir par la droite de l'ecran (on retire 32 car c'est la largeur du sprite)
Pas_x=-Pas_x ; on inverse le sens du deplacement X en mettant une valeur inverse
EndIf
If x<0 ; le sprite va sortir par la gauche de l'ecran
Pas_x=-Pas_x ; on inverse le sens du deplacement X en mettant une valeur inverse
a=1
EndIf
; ** pour les Y
If y>hauteur_ecran-32 ; le sprite va sortir par le Bas de l'ecran (on retire 32 car c'est la hauteur du sprite)
Pas_y=-Pas_y ; on inverse le sens du deplacement Y en mettant une valeur inverse
EndIf
If y<0 ; me sprite va sortir par le Haut de l'ecran
Pas_y=-Pas_y ; on inverse le sens du deplacement Y en mettant une valeur inverse
EndIf
If x2>largeur_ecran -32; le sprite va sortir par la droite de l'ecran (on retire 32 car c'est la largeur du sprite)
Pas_x2=-Pas_x2 ; on inverse le sens du deplacement X en mettant une valeur inverse
EndIf
If x2<0 ; le sprite va sortir par la gauche de l'ecran
Pas_x2=-Pas_x2 ; on inverse le sens du deplacement X en mettant une valeur inverse
a=0
EndIf
; ** pour les Y
If y2>hauteur_ecran-32 ; le sprite va sortir par le Bas de l'ecran (on retire 32 car c'est la hauteur du sprite)
Pas_y2=-Pas_y2 ; on inverse le sens du deplacement Y en mettant une valeur inverse
EndIf
If y2<0 ; me sprite va sortir par le Haut de l'ecran
Pas_y2=-Pas_y2 ; on inverse le sens du deplacement Y en mettant une valeur inverse
EndIf
; *********************************************
StartDrawing(ScreenOutput())
DrawText(10, 580, "Touche Esc pour quitter." , RGB(242, 249, 85), RGB(0, 0, 0))
StopDrawing()
FlipBuffers()
ClearScreen(RGB(0,0,0))
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Else
MessageRequester("Erreur", "Impossible d'ouvrir un écran en 800 * 600 - 32 bits!", 0)
EndIf
End