Page 1 sur 3

clipsprite et planche de sprite verticale

Publié : jeu. 30/mai/2013 18:19
par grostonton
Bonjour à tous,

Je viens vers vous car j'ai un intérêt certain pour la programmation. Ayant testé (en restant au niveau de grand débutant malheureusement) divers langage (C, Python) je suis tombé un peu par hasard sur PureBasic. En voyant ici et là sur les forums le bien que les différents utilisateurs en disait, je me suis dit que ça pouvait être un bon choix, mes critères étant simplicité d'apprentissage et puissance du langage. Sur les quelques exemples que j'ai vu, tout ça semble être réunis dans PureBasic. Du coup, je me suis décidé à l'acheter et à rentrer petit à petit dans le vif du sujet.

Désolé pour la petite présentation, j'en viens à mon problème.

Voilà je suis du mieux que je peux le tuto "premiers pas avec purebasic" qui se trouve sur le site de games creators network, qui est dans l'ensemble bien expliqué et simple à suivre. Malgrès tout je me suis confronté à un souci quand j'ai voulu modifier le code d'animation du sprite.
Ce que je voulais arriver à faire c'est d'animer un sprite se dirigeant vers la droite.
Je vous montre le code modifié (enfin très legerement)

Code : Tout sélectionner

;Déclare les procédures
Declare GestionClavier()
Declare AnimationSprite()
Declare DeplaceSprite()
Declare AfficheTexte()

Structure s_Sprite
    Direction.l              ; Direction de l'animation , Haut droite bas ou gauche 
    ImageEnCours.l           ; Indique quelle image de l'animation est actuellement en cours 
    ImageMaxi.l               ; Nombre d'image maxi pour une animation , ici on a 3 images par direction
    TailleX.l                ; Dimension en X de chaque image 
    TailleY.l                ; Dimension en Y de chaque image
    TempsEnCours.l           ; Indique la durée d'affichage de l'image en cours
    TempsMaxi.l              ; Indique la durée maxi d'affichage d'une image avant de passer à la suivante
    x.l                      ; Position en X du sprite
    y.l                      ; Position en Y du sprite
    PasX.l                    ; Vitesse déplacement en X
    PasY.l                    ; Vitesse déplacement en Y
EndStructure 

;Déclare 4 constantes 
Enumeration
    #AnimeDroite

EndEnumeration  

;On déclare un personnage  
Global Gus.s_Sprite

Gus\Direction    = #AnimeDroite            ; On choisit une direction

Gus\ImageMaxi    = 4                      ;******** (0,1,2,3,4) ce qui fait bien 5 images*********

Gus\ImageEnCours = 0                       ; On se place sur la première image de l'animation

Gus\TailleX      = 32                      ;********* Taille d'une image********* 

Gus\TailleY      = 40                      ;********* Taille d'une image********* 

Gus\TempsEnCours = ElapsedMilliseconds() ; Initialise la durée d'affichage de l'ImageEnCours
Gus\TempsMaxi    = 150                     ; Ajuster la vitesse de l'animation ici
Gus\x            = 200                     ; Position à l'écran en X
Gus\y            = 200                     ; Position à l'écran en Y


;Initialise l'environnement nécessaire au fonctionnement des sprites et pour ouvrir un écran.
InitSprite()

;Initialise l'environnement propre à la gestion du clavier. 
InitKeyboard()

;Ouvre un nouvel écran avec les caractéristiques Largeur, Hauteur et Profondeur. 
OpenScreen(640,480,32,"Tut Sprite")

;Active le support du format PNG (Portable Network Graphic)
UsePNGImageDecoder() 
    
;Charge en mémoire le sprite 

If LoadSprite(0,"C:\Users\jeffranso\Documents\DATA\Prog\PUREbasic\sprites\chuck\marcheChuck2.png")=0 ;*****sprite se trouvant sur mon disque dur*****
  
  MessageRequester("Erreur","Impossible de charger le sprite Player.png",0)
    End ; Quitte le programme
EndIf    

Repeat
    ;Inverse le buffer d'arrière plan avec le buffer visible à l'écran. 
    ;La partie invisible du buffer remplace alors complètement La partie visible. 
    FlipBuffers()
    
    ;Efface l'écran courant avec la couleur specifiée. 
    ClearScreen(RGB(0,0,0))
    
    ;Gestion du clavier
    GestionClavier()
    
    ;Affiche un texte à l'écran
    AfficheTexte()
    
    ;Anime le sprite
    AnimationSprite()
    
    ;Deplace et affiche le sprite
    DeplaceSprite()
    
Until KeyboardPushed(#PB_Key_Escape)

End

Procedure AfficheTexte()
    
    StartDrawing(ScreenOutput())
    FrontColor(RGB(255,255,0))
    BackColor(RGB(0,0,255))
    DrawText(0,0,"Appuyez sur la touche [Echap] pour quitter")
    StopDrawing()
    
EndProcedure

Procedure GestionClavier()
    
    If ExamineKeyboard()
        
        ;La touche haut du curseur est appuyée

            ;La touche droite du curseur est appuyée
        If KeyboardPushed(#PB_Key_Right)
            Gus\Direction=#AnimeDroite
            Gus\PasX = 1
        EndIf
    EndIf    
    
EndProcedure

Procedure AnimationSprite()
    
    ;Test si la durée maxi d'affichage d'une image est dépassée 
    If ElapsedMilliseconds()-Gus\TempsEnCours>Gus\TempsMaxi
        
        ;Initialise la durée d'affichage
        Gus\TempsEnCours=ElapsedMilliseconds()
        
        ;Incrémente l'image en cours, pour afficher l'image suivante.
        Gus\ImageEnCours + 1
        
        ;On reboucle l'animation ici 
        If Gus\ImageEnCours>Gus\ImageMaxi
            Gus\ImageEnCours = 0 
        EndIf 
        
    EndIf
    ClipSprite(0,Gus\ImageEnCours * Gus\TailleX, Gus\Direction * Gus\TailleY, Gus\TailleX , Gus\TailleY)
    
EndProcedure    
Procedure DeplaceSprite()
    
    Gus\x + Gus\PasX  ; Ajoute le pas en X à la position courante du sprite
    Gus\y + Gus\PasY  ; Ajoute le pas en Y à la position courante du sprite
    Gus\PasX = 0      ; Initialise le pas , il faudra appuyer à nouveau sur une touche pour l'activer
    Gus\PasY = 0      ; Initialise le pas , il faudra appuyer à nouveau sur une touche pour l'activer
    
    ;Affiche le sprite à la nouvelle position
    DisplayTransparentSprite(0,Gus\x, Gus\y)
    
EndProcedure
Et les lignes que j'ai modifié

Code : Tout sélectionner

Gus\ImageMaxi    = 4                      ;******** (0,1,2,3,4) ce qui fait bien 5 images*********

Code : Tout sélectionner

Gus\TailleX      = 32                      ;********* Taille d'une image********* 

Gus\TailleY      = 40                      ;********* Taille d'une image********* 

Code : Tout sélectionner

If LoadSprite(0,"C:\Users\jeffranso\Documents\DATA\Prog\PUREbasic\sprites\chuck\marcheChuck2.png")=0 ;*****sprite se trouvant sur mon disque dur*****
J'ai également supprimé les constantes dont je n'avais pas besoin pour faire mon test.

Dans l'état actuel, la première image de la planche de sprite se déplace bien vers la droite quand j'appuie sur la flèche droite, mais l'animation ne passe jamais sur les images suivantes, et mon sprite clignote c'est assez ignoble à voir :?

Je vous montre également le sprite en question
Image

Ce que j'aimerai comprendre, c'est pourquoi le code marche niquel avec une planche de sprite horizontale, et ne marche pas avec une planche verticale...
J'ai quand même un peu cherché avant de venir vers vous, car je pense (dites moi si je me trompe) que le souci est au niveau de la fonction "clipsprite", j'ai testé à taton de la modifier, inverser tailleX et tailleY par exemple mais rien n'y fait.
Alors c'est sûr que je pourrais modifier toutes mes planches pour les mettre horizontales, mais bon je prefererais quand même comprendre comment tout ça fonctionne.

D'ordre géneral je trouve l'aide de PureBasic assez bien foutue, mais là, je la trouve un peu légère sur cette fonction, voire même peu claire. Quelques images en exemple, n'aurait pas été du luxe.

Bon ben voilà, je sais ça fait grand débutant, mais je compte quand même sur vous pour éclairer ma lanterne.

Merci d'avance.

Re: clipsprite et planche de sprite verticale

Publié : jeu. 30/mai/2013 18:24
par Ar-S
Salut et bienvenue.

edition en cours

Re: clipsprite et planche de sprite verticale

Publié : jeu. 30/mai/2013 19:22
par comtois
Code corrigé , le problème était bien au niveau de ClipSprite(), voici la correction !
ClipSprite(0,Gus\Direction * Gus\TailleX, Gus\ImageEnCours * Gus\TailleY, Gus\TailleX , Gus\TailleY)
Il faut calculer la position de la nouvelle image sur l'axe des y (à l'aide de Gus\ImageEnCours).

Et j'ai ajouté cette ligne pour définir la couleur transparente de ton sprite.
TransparentSpriteColor(0, RGB(255, 0, 255))

Code : Tout sélectionner

;Déclare les procédures
Declare GestionClavier()
Declare AnimationSprite()
Declare DeplaceSprite()
Declare AfficheTexte()

Structure s_Sprite
  Direction.l              ; Direction de l'animation , Haut droite bas ou gauche
  ImageEnCours.l           ; Indique quelle image de l'animation est actuellement en cours
  ImageMaxi.l               ; Nombre d'image maxi pour une animation , ici on a 3 images par direction
  TailleX.l                ; Dimension en X de chaque image
  TailleY.l                ; Dimension en Y de chaque image
  TempsEnCours.l           ; Indique la durée d'affichage de l'image en cours
  TempsMaxi.l              ; Indique la durée maxi d'affichage d'une image avant de passer à la suivante
  x.l                      ; Position en X du sprite
  y.l                      ; Position en Y du sprite
  PasX.l                    ; Vitesse déplacement en X
  PasY.l                    ; Vitesse déplacement en Y
EndStructure

;Déclare 4 constantes
Enumeration
  #AnimeDroite
  
EndEnumeration 

;On déclare un personnage 
Global Gus.s_Sprite

Gus\Direction    = #AnimeDroite            ; On choisit une direction

Gus\ImageMaxi    = 4                      ;******** (0,1,2,3,4) ce qui fait bien 5 images*********

Gus\ImageEnCours = 0                       ; On se place sur la première image de l'animation

Gus\TailleX      = 32                      ;********* Taille d'une image*********

Gus\TailleY      = 40                      ;********* Taille d'une image*********

Gus\TempsEnCours = ElapsedMilliseconds() ; Initialise la durée d'affichage de l'ImageEnCours
Gus\TempsMaxi    = 150                     ; Ajuster la vitesse de l'animation ici
Gus\x            = 200                     ; Position à l'écran en X
Gus\y            = 200                     ; Position à l'écran en Y


;Initialise l'environnement nécessaire au fonctionnement des sprites et pour ouvrir un écran.
InitSprite()

;Initialise l'environnement propre à la gestion du clavier.
InitKeyboard()

;Ouvre un nouvel écran avec les caractéristiques Largeur, Hauteur et Profondeur.
OpenScreen(640,480,32,"Tut Sprite")

;Active le support du format PNG (Portable Network Graphic)
UsePNGImageDecoder()

;Charge en mémoire le sprite

If LoadSprite(0,"marcheChuck2.png")=0 ;*****sprite se trouvant sur mon disque dur*****
  
  MessageRequester("Erreur","Impossible de charger le sprite Player.png",0)
  End ; Quitte le programme
EndIf   

TransparentSpriteColor(0, RGB(255, 0, 255))

Repeat
  ;Inverse le buffer d'arrière plan avec le buffer visible à l'écran.
  ;La partie invisible du buffer remplace alors complètement La partie visible.
  FlipBuffers()
  
  ;Efface l'écran courant avec la couleur specifiée.
  ClearScreen(RGB(0,0,0))
  
  ;Gestion du clavier
  GestionClavier()
  
  ;Affiche un texte à l'écran
  AfficheTexte()
  
  ;Anime le sprite
  AnimationSprite()
  
  ;Deplace et affiche le sprite
  DeplaceSprite()
  
Until KeyboardPushed(#PB_Key_Escape)

End

Procedure AfficheTexte()
  
  StartDrawing(ScreenOutput())
  FrontColor(RGB(255,255,0))
  BackColor(RGB(0,0,255))
  DrawText(0,0,"Appuyez sur la touche [Echap] pour quitter")
  StopDrawing()
  
EndProcedure

Procedure GestionClavier()
  
  If ExamineKeyboard()
    
    ;La touche haut du curseur est appuyée
    
    ;La touche droite du curseur est appuyée
    If KeyboardPushed(#PB_Key_Right)
      Gus\Direction=#AnimeDroite
      Gus\PasX = 1
    EndIf
  EndIf   
  
EndProcedure

Procedure AnimationSprite()
  
  ;Test si la durée maxi d'affichage d'une image est dépassée
  If ElapsedMilliseconds()-Gus\TempsEnCours>Gus\TempsMaxi
    
    ;Initialise la durée d'affichage
    Gus\TempsEnCours=ElapsedMilliseconds()
    
    ;Incrémente l'image en cours, pour afficher l'image suivante.
    Gus\ImageEnCours + 1
    
    ;On reboucle l'animation ici
    If Gus\ImageEnCours>Gus\ImageMaxi
      Gus\ImageEnCours = 0
    EndIf
    
  EndIf
  ClipSprite(0,Gus\Direction * Gus\TailleX, Gus\ImageEnCours * Gus\TailleY, Gus\TailleX , Gus\TailleY)
  
EndProcedure   
Procedure DeplaceSprite()
  
  Gus\x + Gus\PasX  ; Ajoute le pas en X à la position courante du sprite
  Gus\y + Gus\PasY  ; Ajoute le pas en Y à la position courante du sprite
  Gus\PasX = 0      ; Initialise le pas , il faudra appuyer à nouveau sur une touche pour l'activer
  Gus\PasY = 0      ; Initialise le pas , il faudra appuyer à nouveau sur une touche pour l'activer
  
  ;Affiche le sprite à la nouvelle position
  DisplayTransparentSprite(0,Gus\x, Gus\y)
  
EndProcedure

Re: clipsprite et planche de sprite verticale

Publié : jeu. 30/mai/2013 20:12
par grostonton
Ar-S a écrit : Salut et bienvenue.
Salut et merci.
comtois a écrit : Code corrigé , le problème était bien au niveau de ClipSprite(), voici la correction !
Ha trop fort comtois, merci. Maintenant ça marche niquel. Je savais bien que je trouverai de l'aide ici :D

Re: clipsprite et planche de sprite verticale

Publié : jeu. 30/mai/2013 20:41
par SPH
On aime aider les nouveaux. 8)
ps : une planche de sprites horizontale depense moins de memoire qu'une verticale. :idea:

Re: clipsprite et planche de sprite verticale

Publié : jeu. 30/mai/2013 20:53
par grostonton
SPH a écrit : On aime aider les nouveaux. 8)
Et ça fait plaisir :)

SPH a écrit : ps : une planche de sprites horizontale depense moins de memoire qu'une verticale. :idea:
Alors là, je veux bien que tu m'explique (même si mes connaissances sont limitées) parce que je ne vois pas la différence qu'il pourrait y avoir entre une planche de 32*200 et une planche de 200*32 ?

Re: clipsprite et planche de sprite verticale

Publié : jeu. 30/mai/2013 21:11
par comtois
grostonton a écrit :
comtois a écrit : Code corrigé , le problème était bien au niveau de ClipSprite(), voici la correction !
Ha trop fort comtois, merci. Maintenant ça marche niquel. Je savais bien que je trouverai de l'aide ici :D
Tu n'as pas dit de mal de mon tuto ,alors ça va :)

Par contre je viens de le relire, c'est vrai qu'il faudrait le rafraichir un peu pour le mettre au goût du jour et développer un peu plus certains points, mais je n'ai plus trop le temps.
Le principe du wiki c'est que tout le monde peut éditer pour corriger ce qui cloche, alors s'il y a des courageux qu'ils ne s'en privent pas :)

voici le lien
http://www.games-creators.org/wiki/Pure ... remiersPas

Re: clipsprite et planche de sprite verticale

Publié : jeu. 30/mai/2013 21:36
par grostonton
comtois a écrit : Tu n'as pas dit de mal de mon tuto ,alors ça va :)
Ha non, ça ne risque pas, il est quand même accessible pour les gens comme moi lol

Après, loin de moi l'envie de critiquer, mais je trouve très dommageable (surtout pour le langage) qu'il n'y est pas de vrais tutoriaux complets et didactique pour apprendre le Pure Basic. Heureusement pour moi que je ne suis pas allergique à l'anglais, j'ai donc acheté "Programming 2D Scrolling Games_ For Pure Basic- de Siqueira, Derlidio" mais bon malgrès tout, il y a certaines finesses qui m'échappent.

Re: clipsprite et planche de sprite verticale

Publié : jeu. 30/mai/2013 21:42
par Fig
Il y a une rubrique Tuto au forum où pas mal de choses sont bien expliquées...

Sinon il y a aussi l'aide de Pb qui est très complète avec de petits codes interressants.

Re: clipsprite et planche de sprite verticale

Publié : jeu. 30/mai/2013 22:31
par Backup
faut dire que la plupart des utilisateurs PureBasic
sont en fait d'anciens codeurs venant d'ordinateurs 8,16,32 bits
(Atari,Amiga,PC) ou pour les plus anciens (Oric,Thomson,TI,Sinclair,Comodore ,etc ... )
et qui ont appris les bases de la programmation
soit sur les magazines d’époques,soit en Club, soit entre potes (les Groups) ,soit a l’école

rare sont ceux qui viennent a purebasic sans avoir déjà codé avec un langage
donc les notions d'animations, de variables local/global, de procédure/fonctions ,de sous programmes de buffering, de scrooling , etc... sont deja connu , de la plupart des membres

seul la communauté des Forums compense et comble les lacunes de certains ....

mais malheureusement, pour les tres grands débutants,
le forum ne répondra pas forcement a leur attente, car s'occuper
d'un Debutant pour lui apprendre les bases de la programmation , prends du temps
et ici , nous sommes tous bénévoles, et pas mal occupé par nos propres Prg :)

toutefois, n'hésite pas a poser une question, même si ça prends du temps
la réponse fini toujours par arriver :)

Re: clipsprite et planche de sprite verticale

Publié : jeu. 30/mai/2013 22:39
par Ar-S
Désolé pour le retard, content que tu ais eu la correction de ton clipsprite.
Je suis partie sur autre chose puis partie de chez moi ^^

Re: clipsprite et planche de sprite verticale

Publié : ven. 31/mai/2013 5:40
par grostonton
Fig a écrit : Sinon il y a aussi l'aide de Pb qui est très complète avec de petits codes interressants.
Je la trouve vraiment complète aussi, alors le problème vient peut être de moi, mais pour la fonction clipsprite, je trouve ça peu clair :

Syntaxe

ClipSprite(#Sprite, x, y, Largeur, Hauteur)

Description

Change la zone affichable du #Sprite par la nouvelle zone. Par exemple, si un sprite fait 100*100 pixels (largeur*Hauteur) et que l'on définit une zone de 'clipping' x=10, y=10, Largeur=20, Hauteur=20, alors seule la zone comprise entre ces coordonnées sera affichée. Le #Sprite se comporte alors exactement comme un nouveau sprite de 20*20.


X et Y et Largeur et Hauteur, pour moi c'est sensiblement pareil. quand il est dit que seule la zone comprise entre ces coordonnées sera affichée, on a du mal (ou j'ai du mal) à savoir quelle zone sera affichée. Vraiment si quelques images avaient pu venir aider à l'explication, ça n'aurait pas fait de mal.
Dobro a écrit : mais malheureusement, pour les tres grands débutants,
le forum ne répondra pas forcement a leur attente, car s'occuper
d'un Debutant pour lui apprendre les bases de la programmation , prends du temps
et ici , nous sommes tous bénévoles, et pas mal occupé par nos propres Prg :)
Non mais je ne vous en demande pas tant, je me doute bien que vous avez un tas de choses à faire, mais je suis content de savoir que si à un moment donné je bloque, il y aura toujours une personne pour m'aider :D
Ar-S a écrit : Désolé pour le retard, content que tu ais eu la correction de ton clipsprite.
Je suis partie sur autre chose puis partie de chez moi ^^
Pas de soucis, merci quand même à toi de t'être penché sur mon problème.

A bientôt

Re: clipsprite et planche de sprite verticale

Publié : ven. 31/mai/2013 8:34
par SPH
grostonton a écrit :
SPH a écrit : ps : une planche de sprites horizontale depense moins de memoire qu'une verticale. :idea:
Alors là, je veux bien que tu m'explique (même si mes connaissances sont limitées) parce que je ne vois pas la différence qu'il pourrait y avoir entre une planche de 32*200 et une planche de 200*32 ?
Uniquement dans le cas ou la planche n'est pas de 32 (ou un multiple de 32)

Re: clipsprite et planche de sprite verticale

Publié : ven. 31/mai/2013 8:45
par Micoute
grostonton, je te souhaite la bienvenue sur ce forum, un de plus dans la famille ça fait toujours plaisir et j'espère que tu seras un pilier de ce forum.
Bien sûr, il te faudra acquérir de la connaissance, mais tout le monde sera solidaire pour t'apporter tout ce que tu auras besoin.

Re: clipsprite et planche de sprite verticale

Publié : ven. 31/mai/2013 11:27
par Ar-S
Pour le fun, voilà mon Super Bloby :D.

J'ai crée de la même façon que ton sprite en verticale mais sur 4 colonnes de 30 x 150 ce qui donne une image de 120x150
Donc 5 sprites verticale par direction

Utilisez les flèches pour le diriger.. Attention, une fois le mode Super Bloby activé, il sera plus fort qu'il ni parait ^^

Code : Tout sélectionner

; Super Bloby par Ar-S / Mai 2013 / PB 5.11

; ----------- Initialisation ---------------
InitSprite() : InitKeyboard()
UsePNGImageDecoder()
ExamineDesktops()

quite = 0
super = 0
#VitessWin = 4

; Fenêtre
Lfenetre = 400 : Hfenetre = 200
Lscreen = Lfenetre 
Hscreen = Hfenetre-20 ; 20 pour la hauteur de la barre avec le bouton gadget

OpenWindow(0, #PB_Ignore, #PB_Ignore, Lfenetre, Hfenetre, "Super Bloby !", #PB_Window_BorderLess|#PB_Window_ScreenCentered)
ButtonGadget(0, 0, Hfenetre-20, 100, 20, "Quitter")
ButtonGadget(1, 102, Hfenetre-20, 200, 20, "Activer le mode Super Bloby !")
OpenWindowedScreen(WindowID(0), 0, 0, Lscreen, Hscreen, 0, 0, 0)


Structure Bloby
  PosX.l
  PosY.l
  Vitesse.l
  image.l
EndStructure
Global Dim Bloby.Bloby(1)

Bloby(1)\PosX=0
Bloby(1)\PosY=Hscreen-30
Bloby(1)\Vitesse=6

; Chargement des sprites
CatchSprite(0,?sp_blob120x150_png_Start ,0)
; on grab le 1er sprite
ClipSprite(0, 0, 0, 30,30)


;{- Event loop
Repeat
  
  Event = WindowEvent ()
  Delay (2)
  
  ; -------------------- Events -------------------- 
  
  Select Event
      Case #PB_Event_Gadget, #PB_Event_CloseWindow
        If EventGadget() = 0
            quite = 1
        ElseIf EventGadget() = 1
             If super = 0 
                  super + 1
                  SetGadgetText(1, "Mode Super Bloby ON")
             Else
                  super -1
                  SetGadgetText(1, "Mode Super Bloby OFF")
             EndIf          
             
        EndIf
  EndSelect
      
; -------------------- Mouvements --------------------       
      
  ExamineKeyboard ()
  
  If KeyboardPushed(#PB_Key_Left)
    Bloby(1)\PosX - Bloby(1)\Vitesse
    
    ; limite le déplacement de bloby à gauche
    If Bloby(1)\PosX < 1
      Bloby(1)\PosX = 0
      
       ; Pousse fenêtre ^^
        If Super = 1
            PosWinX = WindowX(0) - #VitessWin
            
            If PosWinX < 0
                   PosWinX = 0
            EndIf
            ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
      EndIf
    EndIf
    
    Y+30
    If y<(30*5)
      ClipSprite(0, 30, y, 30,30)
    Else
      y=0
    EndIf
    
  EndIf
  

  
  If KeyboardPushed(#PB_Key_Right)
    Bloby(1)\PosX + Bloby(1)\Vitesse

    ; Limite le déplacement de bloby à droite  
    If Bloby(1)\PosX>Lscreen-30
      Bloby(1)\PosX = Lscreen-30

      ; Pousse fenêtre ^^
      If Super = 1
            PosWinX=WindowX(0) + #VitessWin
              If PosWinX+Lscreen >= DesktopWidth(0)
                   PosWinX = DesktopWidth(0)  - Lscreen
              EndIf
            ResizeWindow(0, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
      EndIf
    EndIf
    
    y+30
    
    If y<(30*5)
      ClipSprite(0, 0, y, 30, 30)
    Else
      y=0
      
    EndIf
  EndIf
  
  If KeyboardPushed(#PB_Key_Up)
    Bloby(1)\PosY - Bloby(1)\Vitesse
    
    ; limite le déplacement de bloby à gauche
    If Bloby(1)\PosY<0
      Bloby(1)\PosY=0
      
       ; Pousse fenêtre ^^
       If Super = 1
            PosWinY=WindowY(0) - #VitessWin
            
            If PosWinY <= 0
                   PosWinY = 0
              EndIf
            ResizeWindow(0, #PB_Ignore, PosWinY, #PB_Ignore, #PB_Ignore)
      EndIf
      
    EndIf
    
    Y+30
    If y<(30*5)
      ClipSprite(0, 60, y, 30,30)
    Else
      y=0
    EndIf
    
  EndIf
  
  If KeyboardPushed(#PB_Key_Down)
    Bloby(1)\PosY + Bloby(1)\Vitesse
    
    ; limite le déplacement de bloby à gauche
    If Bloby(1)\PosY > Hscreen - 30
      Bloby(1)\PosY = Hscreen - 30
      
       ; Pousse fenêtre ^^
        If Super = 1
            PosWinY=WindowY(0) + #VitessWin
            
            If PosWinY >= DesktopHeight(0) - Hfenetre
                   PosWinY = DesktopHeight(0) - Hfenetre
              EndIf
            ResizeWindow(0, #PB_Ignore, PosWinY, #PB_Ignore, #PB_Ignore)
      EndIf
    EndIf
    
    Y+30
    If y<(30*5)
      ClipSprite(0, 90, y, 30,30)
    Else
      y=0
    EndIf
    
  EndIf
  
  
  If KeyboardPushed(#PB_Key_Escape)
    quite = 1
  EndIf
  
  
; -------------------- Affichage -------------------- 

  TransparentSpriteColor(0,$FF00FF)
  DisplayTransparentSprite(0,Bloby(1)\PosX ,Bloby(1)\PosY )
  
  FlipBuffers()
  ClearScreen(RGB(0, 0, 0))
  
  
Until quite = 1

FreeSprite(0)
End


; Dessins du sprite : 4 colonnes de 30 x 150 contenant verticalement 5 sprites de 30x30 par colonne

DataSection
sp_blob120x150_png_Start:
Data.l $474E5089,$0A1A0A0D,$0D000000,$52444849,$78000000,$96000000,$00000308,$BCF42200,$00000012,$58457419,$666F5374,$72617774
Data.l $64410065,$2065626F,$67616D49,$61655265,$C9717964,$00003C65,$4C503000,$00FF4554,$DFB8DCFF,$A7827B80,$C1C2AAA5,$40702CC4
Data.l $016C9162,$86040B34,$1750091C,$794DA13A,$D09D85BE,$D9E7D6A6,$FC4F504F,$67A0FCFD,$00001D58,$4449D607,$DA785441,$9AE95CEC
Data.l $551028AB,$F4458B01,$D876DFFD,$D162D014,$371F9E98,$677D7F74,$6404E128,$864B53A9,$A57E57E1,$B5A210B3,$3B0E7F26,$6DB71812
Data.l $718FFAA3,$6A57A6F5,$D4DD6180,$BD52E25F,$9D0842F9,$EF94B3E7,$43C1DCA5,$99B334F1,$3CD44A50,$51084CCF,$5DF72DC0,$B3A59717
Data.l $05818BD8,$68B88AC1,$312851D7,$352DADB9,$C0BE68B7,$80B79805,$7AA2AC23,$B910ACB9,$68594A98,$F381B9CF,$06B7F63F,$8BB8CBCC
Data.l $84FA245D,$59D2DCAC,$C2B6C80A,$FF665BBE,$C0BD849C,$5A6C43D2,$AB0DE366,$97032976,$E075673A,$310B6038,$F92F5AAD,$B93AF580
Data.l $5076838F,$8077E603,$2E0CC001,$EAAE2E91,$34E3C0FB,$9B581CE9,$EF032F9A,$814E78EF,$558EF0E7,$C93F301F,$ACD81344,$A7557DC9
Data.l $74AE708F,$DC42D558,$38763E06,$29A236C3,$DB9B3FE0,$C0E652C7,$6A63ECD2,$83C22BC7,$02AC0F59,$70970FEC,$181C48C0,$3C901FB8
Data.l $5A3D8EB7,$D7805C39,$AF1FB02A,$54E86683,$9C5C81C3,$770B8F4B,$C3CAF236,$B1A1EE19,$1CFC03F3,$91FCE87A,$AC792EBD,$999D9C06
Data.l $D5336333,$D3B00294,$8537BA69,$FFB68930,$75F347F3,$654085E1,$0D705C57,$7C3D8032,$4B3A5008,$388092EC,$1129D7A1,$A804BE22
Data.l $DC57F51C,$35D75A61,$3B5451EC,$DBF5C089,$C4D702CB,$06381A88,$082A82DC,$01214575,$54BDA27E,$D50D0C0A,$CBC31768,$7F241B1A
Data.l $04F23F9F,$B7F714D8,$D4FEC0F2,$8593FCAF,$3F697F12,$613FD9D2,$183BAB4F,$E06095B7,$C3ED8395,$965118C2,$BC306AA7,$A3B58F4D
Data.l $DB41DDFC,$43DCCF5B,$863F356C,$5F70D549,$C2FD8606,$86C1FFB7,$F3E8CD5E,$53983EA9,$0DBDB68B,$DBC1C4CC,$86B5F180,$50702AFB
Data.l $12831D62,$3AFDD2F9,$E8194970,$C2CD5E02,$965EF72C,$79804FF2,$DBC206AF,$E00DC3C0,$288022CC,$36CB9255,$1C007EBB,$7E39B989
Data.l $193FF90C,$A4755C04,$DC06374E,$1174BC0B,$3380F7F3,$F9986A9A,$3D4B2294,$D09E5E39,$31871BD4,$13BCADAF,$78686AF0,$A3D9BC0A
Data.l $7F6073FF,$BC9614C2,$3474A967,$A4D2D118,$1B73A8F5,$17546D48,$BAB3918B,$C614C3F1,$8618BA30,$1AA619BC,$2A12F981,$62C8C715
Data.l $BEB1380B,$6E6AA619,$2CD81430,$4A5165EB,$BA981D25,$2D532959,$79E053F9,$C328D60E,$53C238E0,$D79557F1,$01B52C22,$A3381B3C
Data.l $A349B824,$A2D95D4C,$FB48C827,$A7F63AB8,$BA53016E,$B651A2C5,$15E97E08,$3B041B36,$5E2D8344,$D743544F,$0404F63C,$4D198B21
Data.l $8CC3BF3D,$B17422A6,$CE4CF77E,$680D664A,$BAD8B275,$3F72A006,$C0E782B1,$1188F44F,$FD75A3A3,$BD9FDDCE,$B38C20EA,$F42BBA27
Data.l $5997C5B3,$584A441B,$A05F8B61,$2BF2BFA9,$08CFE2F5,$CE8A92B2,$455C0DFF,$D6A54D1D,$7E81878A,$9BDAA387,$82BA326F,$55D680B9
Data.l $EC72A42F,$DABC8CBD,$199E76DB,$F3732799,$F0EA599E,$0ECA923D,$954AEA82,$E639BF1E,$A483B395,$A678935A,$97937CDC,$77134F33
Data.l $D6703863,$A15EABCB,$91EBCC8A,$303A9FE6,$A5B81B7F,$3005FFB2,$7F58FFEF,$F01FE239,$E53488FE,$EDADB9DA,$E2DC07B5,$9203C7C7
Data.l $CCCCEDEA,$7CBC32A5,$4189F2A3,$44D9B4E0,$E79C3E71,$9B48CA7A,$86DC6EB4,$973CBEAB,$8845E3A7,$3B466582,$330C4C7E,$134A843C
Data.l $E7758FC7,$2A07226C,$FAD49FC4,$04B2B696,$E89DB0D9,$5C4E75C8,$DF547FC7,$B9B86556,$4857AE11,$FA2E4CD6,$42088088,$D917A55F
Data.l $EF5C4877,$A697702E,$86303622,$1586C061,$12F20F39,$A1763E62,$984691AF,$ABFED950,$69ACC19E,$1D281350,$C8486050,$C83E0459
Data.l $AB80941C,$1564CDCA,$9AFD6223,$CFF1A4EB,$E75FB00B,$6AC3EBB1,$DB8CA022,$AA8AE750,$01F8C660,$C00008B7,$DC98AE17,$CB0B60D8
Data.l $B0E433B8,$1D7E5B2F,$B799C32D,$81E1555F,$686395D7,$E7E10E39,$4B97FC59,$34D2BCC5,$164E7CCD,$F7D28371,$A1338C18,$5A13258D
Data.l $D0FB7297,$1A35530B,$C37B81B6,$9AB2AE31,$4C3FB499,$84852951,$596A993F,$C3B0C374,$61ACCC30,$647C4EF8,$1AA407AE,$5575AED7
Data.l $EA21AE74,$10C35653,$6962D755,$6FEED51E,$5A2AC4C9,$DEF6B1E8,$047CCFF8,$9A7DC8AC,$58981FAC,$321D2F5D,$270EF697,$3685D299
Data.l $8EEE630F,$06854BAB,$12015C78,$99A9D325,$B5CEAB00,$CB95DEBD,$5984A15B,$54D9247C,$8DA808AA,$E474798E,$EBE38017,$1E10D28C
Data.l $94D274B9,$C5919E7E,$21B32A0A,$8985EE75,$F05A3175,$BC473039,$B6D0223F,$626C38AB,$BA7FFB81,$90F8C3FD,$35E07381,$85738C2F
Data.l $CE9FFE60,$04B0A9C3,$A1E0B45C,$56EBB356,$158F6214,$6C5BE3BC,$88C7D71C,$CECD4E82,$B657BADA,$184C67A1,$17424B30,$3DE0C690
Data.l $528A504F,$6D6CDD44,$11C4C660,$2D7172A1,$5B66BB0D,$3A081AC9,$3DE07DEE,$CEFDD700,$652C5DB7,$EAE34867,$BFB5C38B,$E6B5ED0C
Data.l $F4A18163,$06C05AD9,$2418D98D,$C6CF52CB,$C686185D,$6B490F90,$8EFAECC8,$1A0E4B95,$1CFD1DAD,$03430574,$9D43D639,$51EA217C
Data.l $CF1B330C,$1C096661,$F8BA2754,$1CDAAAD1,$5AD4FE0D,$D37E85B7,$53F917DA,$37218606,$2880F81F,$25AFFE96,$F6A795FD,$4FF2E788
Data.l $E54F20ED,$F69BBECD,$40F2FB97,$EAC14A5F,$4A48E47D,$114B2C5C,$FCF0ED46,$1B07B09E,$B130A631,$8296F7D1,$F5827AC1,$2D604848
Data.l $3CC97E0B,$1FD4B8BF,$E4A61084,$6C6224E9,$F6A5345A,$3052420A,$BCFB3E86,$5B5EDD37,$573C592F,$D2639ACE,$10FE0809,$CDAFF4D8
Data.l $AA5575CD,$AD5366F4,$6EF1A416,$9A781705,$074525CD,$B58B54FF,$B9D74C26,$ED64F59E,$BF314BAF,$39232027,$9817AC8F,$71767E1A
Data.l $2D6DC8C3,$11241F01,$25EAA54D,$6CCB8BC8,$21358045,$F0D8095B,$9D4CF10B,$4231364F,$87DC9DCB,$E33ACA4D,$A54601EB,$D90DA521
Data.l $CDAB3EC8,$0FBDB526,$5D327B0C,$5D17499E,$D3243A31,$1CC047C1,$F385D6D5,$65ADE1F0,$EB3BA648,$6073ECFC,$9303B3C0,$DB4E47D6
Data.l $529711CD,$196A6366,$7497B012,$2DE2E91F,$0174FDE0,$6D69AE21,$C5FAFB81,$E2C0AE23,$0B04BDC0,$E45388B6,$FEC0D74D,$2FCDA73D
Data.l $6DDD8130,$BF344FC2,$C6243C0D,$F9124037,$9200630E,$C64E174A,$C35B4E52,$DF52EA46,$96135135,$61A43EFA,$A2350D8A,$1670D9C2
Data.l $53FB27B1,$FEC9AFA2,$B52BF443,$5ADBAE74,$037AFDB5,$40DEBEE2,$B819432F,$57DE0DA9,$DAC9C7E7,$E85F0B05,$00CED000,$0F7C590C
Data.l $2BF94478,$92D06E2C,$FFCC1977,$DDDFDC06,$8FAD94EB,$1546BE04,$006013FF,$83CD1074,$B6A901E9,$00000000,$444E4549,$826042AE
sp_blob120x150_png_End:
EndDataSection ;}