DisplaySprite et CatchImage

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

DisplaySprite et CatchImage

Message par venom »

Bonjour,

Voilà j'ai toujours afficher mes sprites (dans un OpenWindowedScreen ) via des LoadSprite ou des CreateSprite avec les fonctions 2DDrawing (Box, Circle etc...)

Mais la je n'arrive pas a afficher une image via CatchImage :oops:

J'ai tester avec le code d'exemple de la doc qui au passage utilise le combo CreateSprite/2DDrawing et qui fonctionne tres bien :

Code : Tout sélectionner

 InitSprite()
  
  If OpenWindow(0, 0, 0, 220, 160, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160)
      
      CreateSprite(0, 20, 20)
      If StartDrawing(SpriteOutput(0))
        Box(0, 0, 20, 20, RGB(255, 0, 0))
        StopDrawing()
      EndIf
      
   EndIf
  EndIf
  
  direction = 2
  Repeat
   Repeat
    Event = WindowEvent()
     
     Select event   
      Case #PB_Event_CloseWindow
       End
     EndSelect 
   Until event=0
  
    FlipBuffers() 
    ClearScreen(RGB(0, 0, 0))
    DisplaySprite(0, x, x)
    x + direction
    If x > 140 : direction = -2 : EndIf
    If x < 0   : direction =  2 : EndIf
    Delay(1)
  ForEver
Maintenant je cherche a remplacer la Red Box par une image en Data Mais je n'y parvient pas.

Code : Tout sélectionner

InitSprite()
UsePNGImageDecoder()


  If OpenWindow(0, 0, 0, 220, 160, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160)

      CreateSprite(0, 20, 20)
      If StartDrawing(SpriteOutput(0))
        CatchImage(0, ?soccer_ball_png_start, ?soccer_ball_png_end - ?soccer_ball_png_start) ; c'est ici que je coince
       StopDrawing()
      EndIf
      
   EndIf
  EndIf
  
  direction = 2
  Repeat
   Repeat
    Event = WindowEvent()
     
     Select event   
      Case #PB_Event_CloseWindow
       End
     EndSelect 
   Until event=0
  
    FlipBuffers() 
    ClearScreen(RGB(0, 0, 0))
    DisplaySprite(0, x, x)
    x + direction
    If x > 140 : direction = -2 : EndIf
    If x < 0   : direction =  2 : EndIf
    Delay(1)
  ForEver
  
  
  
  DataSection
  soccer_ball_png_start:
    ; size : 901 bytes
    Data.q $0A1A0A0D474E5089,$524448490D000000,$1000000010000000,$FFF31F0000000608,$5948700900000061
    Data.q $0B0000130B000073,$0000189C9A000113,$00004D5248632000,$000083800000257A,$0000E9800000FFF9
    Data.q $000060EA00003075,$5F926F170000983A,$44490B03000046C5,$285F9374DA785441,$E756AEBFC6007BF3
    Data.q $F9417217339D3A92,$DC172D65726AE593,$B2FC2E475699929C,$9B0B5E142C34CB59,$112D2DF8768A32D8
    Data.q $29C5DA36692D6CD1,$708AC5FE4FE58A14,$53B9CFA96F42ED31,$CFA7A9E2E78B9CDE,$40AAFC4008F3D3C5
    Data.q $ADADAD3F7F7F4020,$ECC6565650D4D4D4,$B9B317ECBBF7ACEC,$84026BDBDBDE19B9,$B0B0B10A1423E7CF
    Data.q $44489110066CD980,$AFAC05BE7A040817,$6883E3E3E2005FAF,$64C93F9FCFC00A34,$C3333330BCBCBC32
    Data.q $A76FE850A13DFDFD,$7B5B5B5802FA19D3,$93939325E5E5C400,$7864C990036F6F6C,$999996F6F6E27A7A
    Data.q $D1996590FAFAFA19,$9FBFFF7F7F50D1D1,$F4CB2CB71D9D9D80,$AFAFA858B161F5F5,$32452A5494F4F4E7
    Data.q $D092490565656499,$183060545454F5EB,$0FE4E4E4FDE92490,$BB76E1018F060C11,$AD5A874E9D092491
    Data.q $EEC4747470891226,$3ABABA83870E2EEE,$BAA1292928AAAAAA,$A7A7A665E5E59ABA,$4C37B7B79FBF7E11
    Data.q $854A9516AD5A1326,$934E9D20ECFF6EDD,$52A545ADADA8A54A,$EFC22A2A292A54A1,$3C78F089D9D9D3F7
    Data.q $C18EDEDED0DCDCDC,$C0F0F0F356AD4060,$DDDCAFAFAF3BFBFB,$461E1E19264C91DD,$E5E5E51656564108
    Data.q $4E105A5A5A5EBD78,$AFAFAE39B9B993A7,$B1B23E3E3CD3A749,$57575733F3F3C1B1,$D9B1C78F121E1E1C
    Data.q $702448931F1F1C6C,$1A3462F6F6F41C38,$C5CAD5AB19B36611,$9F9F9CA7A7A705C5,$7F633B3B3878F1E3
    Data.q $C5EBD78A34689F7F,$EFDF85B5B5B1F3E7,$CD82C58B02626267,$68D1A18D8D8C4366,$68C3870A9FE3C788
    Data.q $6C6C699B9B9A1A34,$6590C58B13D7AF44,$1A172E5C11919199,$9326488AD5AB068D,$3A74E85E161615BF
    Data.q $6AC45C5C58969696,$3171714A5A5A52B5,$CB23676764F9F9F9,$7A01818183870E32,$1C1CCDCDCDC87A7A
    Data.q $C71A34610029FC1C,$13264C366CD81084,$54A1E5E5E4858585,$56810841C9C9C92A,$443434323468C5AB
    Data.q $FC93535341E56565,$CF9F1FE18306CA65,$93A74E2AEAEAD7F7,$850A050A14028282,$B130E1C206868682
    Data.q $75756371F1F18C58,$BDEDDBB267B7CEF5,$F3376EDC3F1D1D1D,$060C11B5B5B4F3F3,$2E5C418304E3C789
    Data.q $BEFFD354D4D4DB57,$70706F2244891011,$ABA66E6E68924910,$376EDC6EEEEE8BAB,$6FFF9AFFBF878787
    Data.q $3285D19FA3885900,$4E45490000000074
    Data.b $44,$AE,$42,$60,$82
  soccer_ball_png_end:
EndDataSection

D'avance merci







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: DisplaySprite et CatchImage

Message par Ar-S »

Salut Venom,
C'est normal, dans ton sprite tu dessines pas d'images, tu la récupères en mémoire via catchimage
C'est comme si tu faisais

If StartDrawing(SpriteOutput(0)) : LoadImage(0, "truc.jpg") : StopDrawing() : endif

Tu vois que ça n'a pas vraiment de sens. :wink:

Pense aussi à gérer la transparence sinon ta balle est carrée.
J'ai modifié

Code : Tout sélectionner

InitSprite()
UsePNGImageDecoder()

IMAGE = CatchImage(#PB_Any, ?soccer_ball_png_start, ?soccer_ball_png_end - ?soccer_ball_png_start) ; c'est ici que je coince

  If OpenWindow(0, 0, 0, 220, 160, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160)

    CreateSprite(0, 20, 20,#PB_Sprite_AlphaBlending)
     
     If StartDrawing(SpriteOutput(0))
       DrawingMode(#PB_2DDrawing_Transparent)
        DrawAlphaImage(ImageID(image),0,0,255)
       StopDrawing()
      EndIf
     
   EndIf
  EndIf
 
  direction = 2
  Repeat
   Repeat
    Event = WindowEvent()
     
     Select event   
      Case #PB_Event_CloseWindow
       End
     EndSelect
   Until event=0
 
    FlipBuffers()
    ClearScreen(RGB(0, 0, 0))
    DisplaySprite(0, x, x)
    x + direction
    If x > 140 : direction = -2 : EndIf
    If x < 0   : direction =  2 : EndIf
    Delay(1)
  ForEver
 
 
 
  DataSection
  soccer_ball_png_start:
    ; size : 901 bytes
    Data.q $0A1A0A0D474E5089,$524448490D000000,$1000000010000000,$FFF31F0000000608,$5948700900000061
    Data.q $0B0000130B000073,$0000189C9A000113,$00004D5248632000,$000083800000257A,$0000E9800000FFF9
    Data.q $000060EA00003075,$5F926F170000983A,$44490B03000046C5,$285F9374DA785441,$E756AEBFC6007BF3
    Data.q $F9417217339D3A92,$DC172D65726AE593,$B2FC2E475699929C,$9B0B5E142C34CB59,$112D2DF8768A32D8
    Data.q $29C5DA36692D6CD1,$708AC5FE4FE58A14,$53B9CFA96F42ED31,$CFA7A9E2E78B9CDE,$40AAFC4008F3D3C5
    Data.q $ADADAD3F7F7F4020,$ECC6565650D4D4D4,$B9B317ECBBF7ACEC,$84026BDBDBDE19B9,$B0B0B10A1423E7CF
    Data.q $44489110066CD980,$AFAC05BE7A040817,$6883E3E3E2005FAF,$64C93F9FCFC00A34,$C3333330BCBCBC32
    Data.q $A76FE850A13DFDFD,$7B5B5B5802FA19D3,$93939325E5E5C400,$7864C990036F6F6C,$999996F6F6E27A7A
    Data.q $D1996590FAFAFA19,$9FBFFF7F7F50D1D1,$F4CB2CB71D9D9D80,$AFAFA858B161F5F5,$32452A5494F4F4E7
    Data.q $D092490565656499,$183060545454F5EB,$0FE4E4E4FDE92490,$BB76E1018F060C11,$AD5A874E9D092491
    Data.q $EEC4747470891226,$3ABABA83870E2EEE,$BAA1292928AAAAAA,$A7A7A665E5E59ABA,$4C37B7B79FBF7E11
    Data.q $854A9516AD5A1326,$934E9D20ECFF6EDD,$52A545ADADA8A54A,$EFC22A2A292A54A1,$3C78F089D9D9D3F7
    Data.q $C18EDEDED0DCDCDC,$C0F0F0F356AD4060,$DDDCAFAFAF3BFBFB,$461E1E19264C91DD,$E5E5E51656564108
    Data.q $4E105A5A5A5EBD78,$AFAFAE39B9B993A7,$B1B23E3E3CD3A749,$57575733F3F3C1B1,$D9B1C78F121E1E1C
    Data.q $702448931F1F1C6C,$1A3462F6F6F41C38,$C5CAD5AB19B36611,$9F9F9CA7A7A705C5,$7F633B3B3878F1E3
    Data.q $C5EBD78A34689F7F,$EFDF85B5B5B1F3E7,$CD82C58B02626267,$68D1A18D8D8C4366,$68C3870A9FE3C788
    Data.q $6C6C699B9B9A1A34,$6590C58B13D7AF44,$1A172E5C11919199,$9326488AD5AB068D,$3A74E85E161615BF
    Data.q $6AC45C5C58969696,$3171714A5A5A52B5,$CB23676764F9F9F9,$7A01818183870E32,$1C1CCDCDCDC87A7A
    Data.q $C71A34610029FC1C,$13264C366CD81084,$54A1E5E5E4858585,$56810841C9C9C92A,$443434323468C5AB
    Data.q $FC93535341E56565,$CF9F1FE18306CA65,$93A74E2AEAEAD7F7,$850A050A14028282,$B130E1C206868682
    Data.q $75756371F1F18C58,$BDEDDBB267B7CEF5,$F3376EDC3F1D1D1D,$060C11B5B5B4F3F3,$2E5C418304E3C789
    Data.q $BEFFD354D4D4DB57,$70706F2244891011,$ABA66E6E68924910,$376EDC6EEEEE8BAB,$6FFF9AFFBF878787
    Data.q $3285D19FA3885900,$4E45490000000074
    Data.b $44,$AE,$42,$60,$82
  soccer_ball_png_end:
EndDataSection

Maintenant que tu as pigé ton erreur, tu peux voir qu'il existe aussi simplement CATCHSPRITE !
Donc pas la peine de créer un sprite puis charger une image que tu dessines dans ce sprite !
Faut juste penser aussi à la gestion de l'alpha.

Code : Tout sélectionner

InitSprite()
UsePNGImageDecoder()


  If OpenWindow(0, 0, 0, 220, 160, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160)
     
     Baballe = CatchSprite(#PB_Any, ?soccer_ball ,#PB_Sprite_AlphaBlending ) 

     
   EndIf
  EndIf

  direction = 2
  Repeat
   Repeat
    Event = WindowEvent()
     
     Select event   
      Case #PB_Event_CloseWindow
       End
     EndSelect
   Until event=0

    FlipBuffers()
    ClearScreen(RGB(0, 0, 0))
    DisplayTransparentSprite(Baballe, x, x, 255)
    x + direction
    If x > 140 : direction = -2 : EndIf
    If x < 0   : direction =  2 : EndIf
    Delay(1)
  ForEver



  DataSection
  soccer_ball:
    ; size : 901 bytes
    Data.q $0A1A0A0D474E5089,$524448490D000000,$1000000010000000,$FFF31F0000000608,$5948700900000061
    Data.q $0B0000130B000073,$0000189C9A000113,$00004D5248632000,$000083800000257A,$0000E9800000FFF9
    Data.q $000060EA00003075,$5F926F170000983A,$44490B03000046C5,$285F9374DA785441,$E756AEBFC6007BF3
    Data.q $F9417217339D3A92,$DC172D65726AE593,$B2FC2E475699929C,$9B0B5E142C34CB59,$112D2DF8768A32D8
    Data.q $29C5DA36692D6CD1,$708AC5FE4FE58A14,$53B9CFA96F42ED31,$CFA7A9E2E78B9CDE,$40AAFC4008F3D3C5
    Data.q $ADADAD3F7F7F4020,$ECC6565650D4D4D4,$B9B317ECBBF7ACEC,$84026BDBDBDE19B9,$B0B0B10A1423E7CF
    Data.q $44489110066CD980,$AFAC05BE7A040817,$6883E3E3E2005FAF,$64C93F9FCFC00A34,$C3333330BCBCBC32
    Data.q $A76FE850A13DFDFD,$7B5B5B5802FA19D3,$93939325E5E5C400,$7864C990036F6F6C,$999996F6F6E27A7A
    Data.q $D1996590FAFAFA19,$9FBFFF7F7F50D1D1,$F4CB2CB71D9D9D80,$AFAFA858B161F5F5,$32452A5494F4F4E7
    Data.q $D092490565656499,$183060545454F5EB,$0FE4E4E4FDE92490,$BB76E1018F060C11,$AD5A874E9D092491
    Data.q $EEC4747470891226,$3ABABA83870E2EEE,$BAA1292928AAAAAA,$A7A7A665E5E59ABA,$4C37B7B79FBF7E11
    Data.q $854A9516AD5A1326,$934E9D20ECFF6EDD,$52A545ADADA8A54A,$EFC22A2A292A54A1,$3C78F089D9D9D3F7
    Data.q $C18EDEDED0DCDCDC,$C0F0F0F356AD4060,$DDDCAFAFAF3BFBFB,$461E1E19264C91DD,$E5E5E51656564108
    Data.q $4E105A5A5A5EBD78,$AFAFAE39B9B993A7,$B1B23E3E3CD3A749,$57575733F3F3C1B1,$D9B1C78F121E1E1C
    Data.q $702448931F1F1C6C,$1A3462F6F6F41C38,$C5CAD5AB19B36611,$9F9F9CA7A7A705C5,$7F633B3B3878F1E3
    Data.q $C5EBD78A34689F7F,$EFDF85B5B5B1F3E7,$CD82C58B02626267,$68D1A18D8D8C4366,$68C3870A9FE3C788
    Data.q $6C6C699B9B9A1A34,$6590C58B13D7AF44,$1A172E5C11919199,$9326488AD5AB068D,$3A74E85E161615BF
    Data.q $6AC45C5C58969696,$3171714A5A5A52B5,$CB23676764F9F9F9,$7A01818183870E32,$1C1CCDCDCDC87A7A
    Data.q $C71A34610029FC1C,$13264C366CD81084,$54A1E5E5E4858585,$56810841C9C9C92A,$443434323468C5AB
    Data.q $FC93535341E56565,$CF9F1FE18306CA65,$93A74E2AEAEAD7F7,$850A050A14028282,$B130E1C206868682
    Data.q $75756371F1F18C58,$BDEDDBB267B7CEF5,$F3376EDC3F1D1D1D,$060C11B5B5B4F3F3,$2E5C418304E3C789
    Data.q $BEFFD354D4D4DB57,$70706F2244891011,$ABA66E6E68924910,$376EDC6EEEEE8BAB,$6FFF9AFFBF878787
    Data.q $3285D19FA3885900,$4E45490000000074
    Data.b $44,$AE,$42,$60,$82
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
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: DisplaySprite et CatchImage

Message par venom »

Salut Ar-S,

:oops: Honte a moi... Je savais que ça n'était pas très compliqué.

Oui, je savais aussi que dans mon exemple catchimage ne faisait que charger l'image :wink: C'était pour fournir un exemple casi complet pour vous. :P

Comme quoi la nuit porte conseil, cette nuit j'ai ouvert les yeux et drawalphaimage est la première fonction qui m'ai venu :D

Par contre catchsprite je ne connaissais pas. Merci du partage 8)







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre