clipsprite et planche de sprite verticale

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: clipsprite et planche de sprite verticale

Message par Backup »

Ar-S a écrit : Attention, une fois le mode Super Bloby activé, il sera plus fort qu'il ni parait ^^
t'arretes plus avec les Datas :)

dis donc ton mode Super truc much , n'aurai pas été inspiré par un de mes codes par hasard ? :lol:

(ça fait 2 fois ... a trois je frappe :) )
http://www.purebasic.fr/french/viewtopi ... es#p108224
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: clipsprite et planche de sprite verticale

Message par Ar-S »

Et c'est pas finis, c'est dirons nous la base de mes test 2D (faut dire j'en ai pas fait d'autres), j'hésite à me plonger dans la 3D, je pourrais pas faire les 2 d'un coup. :P
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: clipsprite et planche de sprite verticale

Message par Backup »

Japonais va ! :lol:
Avatar de l’utilisateur
grostonton
Messages : 8
Inscription : mar. 16/août/2011 17:07

Re: clipsprite et planche de sprite verticale

Message par grostonton »

Micoute a écrit : 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.
Ha ben ça aussi c'est un accueil qui fait plaisir :)
Je ne sais pas si je deviendrai un pilier du forum, mais j'espère que PureBasic me permettra d'aller plus loin qu'avec les quelques autres langages auxquels j'ai touché...
Ar-S a écrit :
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 ^^
HA ça tue, j'aime beaucoup, j'essaie un peu de déchiffrer ton code, c'est pas complètement évident, mais il y a quelques trucs que je crois avoir pigé...
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: clipsprite et planche de sprite verticale

Message par Ar-S »

J'ai modifié le code en suppriment le tableau vu qu'il ni a qu'un sprite.
J'ai mis quelques commentaires de plus.

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 comprenant les infos correspondant au sprite.
Structure Bloby
  PosX.l
  PosY.l
  Vitesse.l
  image.l
EndStructure

; On remplit donc les info concernant bloby
info.Bloby\PosX=0
info.Bloby\PosY=Hscreen-30
info.Bloby\Vitesse=6

; Chargement des sprites
; On charge l'image converti en datas dans la datasection,
; c'est l'équivalent de loadsprite(0,"tonfichier.jpg",0)
CatchSprite(0,?sp_blob120x150_png_Start ,0)

; On grab le 1er sprite
ClipSprite(0, 0, 0, 30,30)


;{-  La Boucle principale

Repeat
  
  Event = WindowEvent ()
  Delay (2)
  
  ; -------------------- Evenements -------------------- 
  
  Select Event
      Case #PB_Event_Gadget, #PB_Event_CloseWindow
        If EventGadget() = 0
            quite = 1
        ElseIf EventGadget() = 1 ; si on appuye sur le bouton Activer super bloby
             If super = 0  ; je passe la variable super à 1
                  super + 1
                  SetGadgetText(1, "Mode Super Bloby ON")
             Else ; sinon on desactive le mode super bloby
                  super -1
                  SetGadgetText(1, "Mode Super Bloby OFF")
             EndIf          
             
        EndIf
  EndSelect
      
; -------------------- Mouvements --------------------       
      
  ExamineKeyboard ()
  
  If KeyboardPushed(#PB_Key_Left)
    ; Deplacement vers la gauche de x pixel sachant que x = vitesse
    info.Bloby\PosX - info.Bloby\Vitesse
   
    ; limite le déplacement de bloby à gauche
    If info.Bloby\PosX < 1
      info.Bloby\PosX = 0
      
       ; Pousse fenêtre ^^ 
       ; si mode bloby activé
        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)
    info.Bloby\PosX + info.Bloby\Vitesse

    ; Limite le déplacement de bloby à droite  
    If info.Bloby\PosX>Lscreen-30
      info.Bloby\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)
    info.Bloby\PosY - info.Bloby\Vitesse
    
    ; limite le déplacement de bloby à gauche
    If info.Bloby\PosY<0
      info.Bloby\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)
    info.Bloby\PosY + info.Bloby\Vitesse
    
    ; limite le déplacement de bloby à gauche
    If info.Bloby\PosY > Hscreen - 30
      info.Bloby\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, info.Bloby\PosX ,info.Bloby\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 ;}
~~~~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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: clipsprite et planche de sprite verticale

Message par Ar-S »

Dernière version de Super Blobby.
- Nouveau sprite
- Image en png fourni
- Si on touche l'orb électrique qui apparait aléatoirement, on active le mode super blobby et on peut "pousser" la fenêtre.
- Si on le retouche, on désactive le mode.
- On se dirige avec les flèches.


Image

Code : Tout sélectionner

; Super Bloby par Ar-S / Mai 2013 / PB 5.11
; Si on touche l'orb électrique qui apparait aléatoirement, on active le mode super blobby et on peut "pousser" la fenêtre.
; Si on le retouche, on désactive le mode.
; on se dirige avec les flèches. 


Enumeration
; Fenêtre
#ARS

;Gadget
#BT_QUIT
#AFFICHE

;Sprites
#BLOB
#BALL

EndEnumeration

Enumeration
; Timers
#T1
#T2
#T3

EndEnumeration


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

quite = 0
NumSprite = 0

#Lsprite = 30
#Hsprite = 30
#Himage = 150
#Limage = 150
#VitessWin = 4


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

; Structure comprenant les infos correspondant au sprite.
Structure Bloby
  PosX.l
  PosY.l
  Vitesse.l
  Super.b
   NbrImage.c
EndStructure

Structure Ball
  X.l
  Y.l
  Vitesse.l
  State.b
EndStructure

; On remplit donc les info concernant bloby
info.Bloby\PosX = 0
info.Bloby\PosY = Hscreen - #Lsprite
info.Bloby\Vitesse = 6
info.Bloby\Super = 0
info.Bloby\NbrImage = 4

; On remplit donc les info concernant la balle
my.ball\X = Random(Lscreen - #Lsprite, #Lsprite)
my.ball\Y = Random(Hscreen - #Hsprite, #Hsprite)
my.ball\Vitesse = 3000
my.ball\State = 1






OpenWindow(#ARS, #PB_Ignore, #PB_Ignore, Lfenetre, Hfenetre, "Super Bloby !", #PB_Window_BorderLess|#PB_Window_ScreenCentered)
ButtonGadget(#BT_QUIT, 0, Hfenetre-20, 100, 20, "Quitter")
StringGadget(#AFFICHE, 102, Hfenetre-20, Lfenetre-102, 20, "Mode super blobby OFF",#ES_CENTER )
OpenWindowedScreen(WindowID(#ARS), 0, 0, Lscreen, Hscreen, 0, 0, 0)

AddWindowTimer(#ARS, #T1, Random(my.ball\Vitesse,1000))
AddWindowTimer(#ARS, #T2, 50)

; Chargement des sprites
LoadSprite(#BLOB,"CHEMIN_A_MODIFIER\sp_jeu150x150.png",0)



; On grab le 1er sprite
ClipSprite(#BLOB, 0, 0, #Lsprite, #Hsprite)


CopySprite (#BLOB, #BALL)
ClipSprite(#BALL, 120, 0, #Lsprite, #Hsprite)

;{-  La Boucle principale

Repeat
  
  Event = WindowEvent ()
  Delay (2)
  
  ; -------------------- Evenements -------------------- 
  
  Select Event
      
      
       Case #PB_Event_Timer
            Select EventTimer()
                  Case #T1
                  
                        ; Etat visible ou non de la balle.
                        If  my.ball\State = 0
                              my.ball\State + 1
                         Else     
                              my.ball\State - 1
                        EndIf     
                        
                        ; repositionnement aléatoire de la balle
                        my.ball\X = Random(Lscreen - #Lsprite, #Lsprite)
                        my.ball\Y = Random(Hscreen - #Hsprite, #Hsprite)     
                        
                   Case #T2
                        
                        ; balle : Changement de sprite à la volée et en boucle
                        If NumSprite > 3 
                              NumSprite = 0
                         Else
                              NumSprite +1
                         EndIf          
                        
                       
                        
                        ClipSprite(#BALL, 120, NumSprite * #Hsprite, #Lsprite, #Hsprite )
                              
                        
             EndSelect     
      
      Case #PB_Event_Gadget, #PB_Event_CloseWindow
        If EventGadget() = #BT_QUIT
            quite = 1
        ElseIf EventGadget() = #AFFICHE ; si on appuye sur le bouton Activer super bloby
             
              If info.Bloby\super = 0  ; je passe la variable super à 1
                  info.Bloby\super + 1
                   SetGadgetText(#AFFICHE, "Mode Super Bloby ON")
            Else ; sinon on desactive le mode super bloby
                  info.Bloby\super -1
                  SetGadgetText(#AFFICHE, "Mode Super Bloby OFF")
            EndIf       
      
        EndIf
  EndSelect
      
; -------------------- Mouvements --------------------       
  
  
  
  
      
  ExamineKeyboard ()
  
  ; --- DEPLACEMENT GAUCHE ---
  
  If KeyboardPushed(#PB_Key_Left)
    ; Deplacement vers la gauche de x pixel sachant que x = vitesse
    info.Bloby\PosX - info.Bloby\Vitesse
   
    ; limite le déplacement de bloby à gauche
    If info.Bloby\PosX < 1
      info.Bloby\PosX = 0
      
       ; Pousse fenêtre ^^ 
       ; si mode bloby activé
        If info.Bloby\super = 1
            PosWinX = WindowX(#ARS) - #VitessWin
            
            If PosWinX < 0
                   PosWinX = 0
            EndIf
            ResizeWindow(#ARS, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
      EndIf
    EndIf
    
    Y + #Hsprite
    If Y < (#Hsprite * info.Bloby\NbrImage)
      ClipSprite(#BLOB, #Lsprite, y, #Lsprite, #Hsprite)
    Else
      y = #Hsprite
    EndIf
      
    
  EndIf
  If KeyboardReleased(#PB_Key_Left)
      ClipSprite(#BLOB, #Lsprite, 0, #Lsprite, #Hsprite)
  EndIf    

  
  
    ; --- DEPLACEMENT DROITE ---
    
  If KeyboardPushed(#PB_Key_Right)
    info.Bloby\PosX + info.Bloby\Vitesse

    ; Limite le déplacement de bloby à droite  
    If info.Bloby\PosX>Lscreen - #Lsprite
      info.Bloby\PosX = Lscreen - #Lsprite

      ; Pousse fenêtre ^^
      If info.Bloby\super = 1
            PosWinX=WindowX(#ARS) + #VitessWin
              If PosWinX+Lscreen >= DesktopWidth(0)
                   PosWinX = DesktopWidth(0)  - Lscreen
              EndIf
            ResizeWindow(#ARS, PosWinX, #PB_Ignore, #PB_Ignore, #PB_Ignore)
      EndIf
    EndIf
    
    y+#Hsprite
    
    If y<(#Hsprite * info.Bloby\NbrImage)
      ClipSprite(#BLOB, 0, y, #Lsprite, #Hsprite)
    Else
      y = #Hsprite
      
    EndIf
  EndIf
   If KeyboardReleased(#PB_Key_Right) 
      ClipSprite(#BLOB, 0, 0, #Lsprite, #Hsprite)
  EndIf    
  
  
  
    ; --- DEPLACEMENT HAUT ---
  
  If KeyboardPushed(#PB_Key_Up)
    info.Bloby\PosY - info.Bloby\Vitesse
    
    ; limite le déplacement de bloby en haut
    If info.Bloby\PosY < 0
      info.Bloby\PosY = 0
      
       ; Pousse fenêtre ^^
       If info.Bloby\super = 1
            PosWinY=WindowY(#ARS) - #VitessWin
            
            If PosWinY <= 0
                   PosWinY = 0
              EndIf
            ResizeWindow(#ARS, #PB_Ignore, PosWinY, #PB_Ignore, #PB_Ignore)
      EndIf
      
    EndIf
    
    Y + #Hsprite
    If y<(#Hsprite * 4)
      ClipSprite(#BLOB, 60, Y, #Lsprite, #Hsprite)
    Else
      Y = #Hsprite
    EndIf
    
  EndIf
   If KeyboardReleased(#PB_Key_Up) 
      ClipSprite(#BLOB, 60, 0, #Lsprite, #Hsprite)
  EndIf    
  
  
    ; --- DEPLACEMENT BAS ---
    
  If KeyboardPushed(#PB_Key_Down)
    info.Bloby\PosY + info.Bloby\Vitesse
    
    ; limite le déplacement de bloby en BAS
    If info.Bloby\PosY > Hscreen - #Hsprite
      info.Bloby\PosY = Hscreen - #Hsprite
      
       ; Pousse fenêtre ^^
        If info.Bloby\super = 1
            PosWinY=WindowY(#ARS) + #VitessWin
            
            If PosWinY >= DesktopHeight(0) - Hfenetre
                   PosWinY = DesktopHeight(0) - Hfenetre
              EndIf
            ResizeWindow(#ARS, #PB_Ignore, PosWinY, #PB_Ignore, #PB_Ignore)
      EndIf
    EndIf
    
    Y + #Hsprite
    If y < (#Hsprite * 4)
      ClipSprite(#BLOB, 90, y, #Lsprite, #Hsprite )
    Else
      y = #Hsprite
    EndIf
    
  EndIf
  
  If KeyboardReleased(#PB_Key_Down) 
      ClipSprite(#BLOB, 90, 0, #Lsprite, #Hsprite)
  EndIf    
  
  
  
  
  If KeyboardPushed(#PB_Key_Escape)
    quite = 1
  EndIf
  
  
; -------------------- Affichage -------------------- 

  TransparentSpriteColor(#BLOB,$FF00FF)
  DisplayTransparentSprite(#BLOB, info.Bloby\PosX ,info.Bloby\PosY )
  
  If my.ball\state = 1
      
      TransparentSpriteColor(#BALL,$FF00FF)
      DisplayTransparentSprite(#BALL, my.Ball\X ,my.Ball\Y)
      
            
      Resultat = SpritePixelCollision(#BLOB, info.Bloby\PosX, info.Bloby\PosY, #Ball, my.ball\X, my.ball\Y)

     If resultat <> 0
            If info.Bloby\super = 0  ; je passe la variable super à 1
                  info.Bloby\super + 1
                   SetGadgetText(#AFFICHE, "-- Mode Super Bloby ON --")
            Else ; sinon on desactive le mode super bloby
                  info.Bloby\super -1
                  SetGadgetText(#AFFICHE, "-- Mode Super Bloby OFF --")
            EndIf
            my.ball\state = 0   
      EndIf
  EndIf
  
  FlipBuffers()
  ClearScreen(RGB(0, 0, 0))
  
  
Until quite = 1

FreeSprite(#BLOB)
FreeSprite(#BALL)
End


~~~~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
Avatar de l’utilisateur
grostonton
Messages : 8
Inscription : mar. 16/août/2011 17:07

Re: clipsprite et planche de sprite verticale

Message par grostonton »

Tout d'abord, je tiens vraiment à te remercier Ar-S !! :D

Le fait que tu m'ais donné deux codes différents pour illustrer la fonction clipsprite, j'ai trouvé ça vachement sympa !

Par contre, il y a quelques lignes (dans les déplacements) dont j'ai pas saisi complètement le but, si tu pouvais m'éclairer un peu :

Code : Tout sélectionner

    Y + #Hsprite
    If Y < (#Hsprite * info.Bloby\NbrImage)
      ClipSprite(#BLOB, #Lsprite, y, #Lsprite, #Hsprite)
    Else
      y = #Hsprite
    EndIf
Et puis je me suis permis de modifier ton deuxième code, qui est plus simple à appréhender pour moi, notamment au niveau du chargement du sprite.
J'ai voulu essayer de refaire exactement la même chose, mais en gérant juste l'affichage d'un seul sprite, les déplacements, la limitation des déplacements dans la fenêtre, sans bouttons gadgets... Enfin vraiment au ""plus simple"" j'ai envie de dire.

Alors le programme se lance, mais plante au bout de quelques secondes, j'aimerais bien savoir où est mon erreur, peut être qu'en enlevant tout un tas de lignes (que je pensais inutile pour ce que je comptais faire) j'en ai trop enlevé ???

Merci encore à toi de t'être penché sur mon problème.

Voici le code :

Code : Tout sélectionner

;test animation sprite dans 4 directions (haut,bas,gauche,droite)


Enumeration
  
  ;fenêtre
  #jf
  
  ;sprite
  #perso
    
EndEnumeration


;initialisation
InitSprite()
InitKeyboard()
UsePNGImageDecoder()
ExamineDesktops()
quitte = 0

#Largeur_sprite = 32  
#Hauteur_sprite  =32
#Hauteur_image = 96
#Largeur_image = 96


; fenêtre
Largeur_fenetre = 320
Hauteur_fenetre = 240
Largeur_screen = Largeur_fenetre
Hauteur_screen = Hauteur_fenetre

Structure perso
  positionX.l
  positionY.l
  vitesse.l
  Nbr_image.l
  
EndStructure

info.perso\positionX = 0
info.perso\positionY = Hauteur_screen - 32
info.perso\vitesse = 2 ; en pixels
info.perso\Nbr_image = 2 ;on compte à partir de 0 donc 0,1,2 ce qui fait bien 3 images


OpenWindow(#jf,50,50,Largeur_fenetre,Hauteur_fenetre,"test anim")
OpenWindowedScreen(WindowID(#jf), 0, 0, Largeur_screen, Hauteur_screen, 0, 0, 0)



;chargement des sprites
LoadSprite(#perso, "C:\Users\jeffranso\Documents\DATA\Prog\PUREbasic\sprites\neige\planche_perso1_1.png",0)


ClipSprite(#perso, 0, 0, 32, 32)

;----------------------------la boucle principale----------------
Repeat

  ;---------------------------mouvements------------------------
  
  ExamineKeyboard()
  
  ;---deplacement gauche---
      
  If KeyboardPushed(#PB_Key_Left)
    
    ;deplacement vers la gauche de x pixels sachant que x = vitesse
        info.perso\positionX - info.perso\vitesse
        ;limite le deplacement à gauche
        If info.perso\positionX < 1
          info.perso\positionX = 0
        EndIf
        
        Y + #Hauteur_sprite
        If Y < (#Hauteur_sprite * info.perso\Nbr_image)
          ClipSprite(#perso, #Largeur_sprite, y, #Largeur_sprite, #Hauteur_sprite)
        Else
          y = #Hauteur_sprite
        EndIf
        
      EndIf
      
      If KeyboardReleased(#PB_Key_Left)
        ClipSprite(#perso, #Largeur_sprite, 0, #Largeur_sprite, #Hauteur_sprite)
        EndIf
      
        ;---deplacement droite---
        
        If KeyboardPushed(#PB_Key_Right)
          
          ;deplacement vers la droite
          info.perso\positionX + info.perso\vitesse
          
          ;limite le deplacement à droite
          If info.perso\positionX > Largeur_screen - #Largeur_sprite
            info.perso\positionX = Largeur_screen - #Largeur_sprite
          EndIf
          
          Y +  #Hauteur_sprite
          If Y <(#Hauteur_sprite * info.perso\Nbr_image)
            ClipSprite(#perso, 0, y, #Largeur_sprite, #Hauteur_sprite)
          Else
            Y = #Hauteur_sprite
          EndIf
          
        EndIf
        
        If KeyboardReleased(#PB_Key_Right)
          ClipSprite(#perso, 0, 0, #Largeur_sprite, #Hauteur_sprite)
        EndIf
        
        
        
        ;---deplacement haut----
        
        If KeyboardPushed(#PB_Key_Up)
          info.perso\positionY - info.perso\vitesse
          
          ;limite le deplacement en haut
          If info.perso\positionY < 0
            info.perso\positionY = 0
          EndIf
          
          Y + #Hauteur_sprite
          
          If y < (#Hauteur_sprite * 3)
            ClipSprite(#perso, 64, Y, #Largeur_sprite, #Hauteur_sprite)
          Else
            Y = #Hauteur_sprite
          EndIf
          
        EndIf
        
        If KeyboardReleased(#PB_Key_Up)
          ClipSprite(#perso, 64, 0, #Largeur_sprite, #Hauteur_sprite)
        EndIf
        
        ;---deplacement bas---
        
        If KeyboardPushed(#PB_Key_Down)
          info.perso\positionY + info.perso\vitesse
          
          ; limite le deplacement vers le bas
          If info.perso\positionY > Hauteur_screen - #Hauteur_sprite
            info.perso\positionY = Hauteur_screen - #Hauteur_sprite
            
          EndIf
          
          Y + #Hauteur_sprite
          If Y < (#Hauteur_sprite*4)
            ClipSprite(#perso, 96,  y, #Largeur_sprite, #Hauteur_sprite)
          Else
            Y = #Hauteur_sprite
          EndIf
          
        EndIf
        
        If KeyboardReleased (#PB_Key_Down)
          ClipSprite (#perso, 96, 0, #Largeur_sprite, #Hauteur_sprite)
        EndIf
        
        
        If KeyboardPushed (#PB_Key_Escape)
          quitte = 1
        EndIf
        
        ;--------------------affichage---------------
        
        TransparentSpriteColor(#perso, RGB(255,0,255))
        DisplayTransparentSprite(#perso, info.perso\positionX, info.perso\positionY)
        
        FlipBuffers()
        ClearScreen(RGB(255,255,255))
        
                
  
  
      Until quitte = 1
      
      FreeSprite (#perso)
      
      End
      
      
      

et le sprite

Image


Edit

Autant pour moi, je viens de bien relire mon code, et j'ai fait une erreur en supprimant la gestion des "events" pour la fenêtre...

Donc en rajoutant ces lignes juste après le "repeat" de la boucle principale, ça y est le programme ne plante plus :

Code : Tout sélectionner

  ;-----evenements-----
  
  
  event = WindowEvent()
  
  Select event
    Case #PB_Event_Gadget
      If EventGadget = 0
        End
      EndIf
      
    Case #PB_Event_CloseWindow
      End
  EndSelect


Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: clipsprite et planche de sprite verticale

Message par Ar-S »

grostonton a écrit : Par contre, il y a quelques lignes (dans les déplacements) dont j'ai pas saisi complètement le but, si tu pouvais m'éclairer un peu :

Code : Tout sélectionner

    Y + #Hsprite
    If Y < (#Hsprite * info.Bloby\NbrImage)
      ClipSprite(#BLOB, #Lsprite, y, #Lsprite, #Hsprite)
    Else
      y = #Hsprite
    EndIf
Y c'est la position verticale du "cadre" qui va clipper l'image.
Prenons la colonnes 2, le blob vers la gauche.

Y + #Hsprite est l'équivalent de Y =Y + #Hsprite. PB ne requiert pas le Y =
If Y < (#Hsprite * info.Bloby\NbrImage)
Là je dis que tant que Y ne dépasse pas 120px alors le clipsprite se poursuit
Else
y = #Hsprite

Sinon le "cadre" se repositionne sur la colonne 2 ligne 2 (le 1er sprite allant vers la gauche).
~~~~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
Avatar de l’utilisateur
grostonton
Messages : 8
Inscription : mar. 16/août/2011 17:07

Re: clipsprite et planche de sprite verticale

Message par grostonton »

Encore merci Ar-S

Tu m'as été d'une très grande aide pour comprendre la fonction clipsprite !!!

Grâce aux quelques lignes que tu m'as expliquée, j'ai saisi que dans la fonction clipsprite

Code : Tout sélectionner

ClipSprite(#Sprite, x, y, Largeur, Hauteur)
Le x et le Y représente réellement l'abscisse et l'ordonnée de l'image (ici la planche de sprite) et Largeur et Hauteur, la largeur et la hauteur de l'image que l'on souhaite afficher (ici la largeur et la hauteur du sprite).

Voilà c'était très peu clair jusqu'ici, mais grâce à votre aide, maintenant ça me parait limpide (à moins que je ne m'emballe, et qu'il y ait quelque chose qui m'échappe encore ???) et j'espère que la petite explication que je donne ici pourra aider certains.

et un petit exemple en image (il est tard, je suis debout depuis 6h du matin, à la moindre erreur de ma part n'hésitez pas)

Image

Avec cette planche de sprite (où chaque sprite fait 32 en largeur et 40 en hauteur)en exemple, et sachant que le sprite N°1 (le premier en haut à gauche est aux coordonnées 0, 0) si je veux afficher le sprite N° G3
alors clipsprite donne :

Code : Tout sélectionner

ClipSprite(#Sprite, 64, 40, 32, 40)
ou alors le sprite N° A3

Code : Tout sélectionner

ClipSprite(#Sprite, 96, 0, 32, 40)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: clipsprite et planche de sprite verticale

Message par Ar-S »

C'est ça :P
~~~~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
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: clipsprite et planche de sprite verticale

Message par G-Rom »

SPH a écrit :
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)
Première fois que je lis ca... tu tiens ça d'ou ? c'est comme si je te disait qu'un pixel blanc ($FFFFFFFF) consomme plus de mémoire qu'un pixel noir ($0)....
Si tu fait références au "power of two" , met toi à la page , toutes les cartes récente le supporte. et ne comble plus avec des pixels vide pour faire des carré n².
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: clipsprite et planche de sprite verticale

Message par SPH »

G-Rom a écrit :
SPH a écrit : ps : une planche de sprites horizontale depense moins de memoire qu'une verticale. :idea:
Uniquement dans le cas ou la planche n'est pas de 32 (ou un multiple de 32)
Première fois que je lis ca... tu tiens ça d'ou ? c'est comme si je te disait qu'un pixel blanc ($FFFFFFFF) consomme plus de mémoire qu'un pixel noir ($0)....
Si tu fait références au "power of two" , met toi à la page , toutes les cartes récente le supporte. et ne comble plus avec des pixels vide pour faire des carré n².
Image
En bleu, des sprites qui ne font pas 32 pixels de large. Mis bout a bout en horizontal, ils consoment 2,7 zones de 32/32. Donc, ils consoment 3 zones.
En vertical, chaque sprite consome 1 zone de 32/32; donc 4 zones.

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: clipsprite et planche de sprite verticale

Message par Backup »

tu la sort d'ou ton info ?
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: clipsprite et planche de sprite verticale

Message par Micoute »

[réédité]
Je ne savais pas que la mémoire était compartimentée en blocs de 32x32 pixels, mais qu'elle était continue !
Dernière modification par Micoute le mer. 05/juin/2013 14:52, modifié 2 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: clipsprite et planche de sprite verticale

Message par G-Rom »

c'est des conneries , et il persiste.
Je ne savais que la mémoire était compartimentée en blocs de 32x32 pixels, mais qu'elle était continue !
c'est du pipeau , la mémoire n'est pas compartimenté en 32 pixels...
Répondre