Page 1 sur 3

[Résolu]Comment crée un sprite à partir de GrabImage?

Publié : jeu. 24/sept./2015 18:58
par Micheao
Bonsoir

Aprés avoir charger une image et utiliser GrabImage Comment faire pour transformer le morceau quel'on as découpé pour le transformer en Sprite afin de l'afficher ?

j'ai passé la journée a essayé de comprendre mais pas reussi .

je sais charger mon image et utliser GrabImage mais aprés comment crée le spite à partir de GrabImage ?

merci encore une fois de votre aide

Re: Comment crée un sprite à partir de GrabImage?

Publié : jeu. 24/sept./2015 19:03
par G-Rom
affiche ton image et utilise GrabSprite()

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 6:35
par Micheao
G-Rom a écrit :affiche ton image et utilise GrabSprite()
Merci G-rom coment ça afficher l'image???

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 6:56
par G-Rom
drawimage ? tu peu même le faire directement dans le sprite

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 8:14
par TazNormand
Micheao lit la doc,tout y est expliqué simplement, tu devrais pouvoir t'en sortir.

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 9:20
par Micheao
G-Rom a écrit :drawimage ? tu peu même le faire directement dans le sprite
et comment on fait directement dans le sprite j'ai essayé mais ça pas marcher

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 9:45
par TazNormand

Code : Tout sélectionner

StartDrawing(SpriteOutput(#idSprite))
DrawImage(ImageID, x, y [, Largeur, Hauteur]) 
StopDrawing()

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 9:51
par Micheao
TazNormand a écrit :

Code : Tout sélectionner

StartDrawing(SpriteOutput(#idSprite))
DrawImage(ImageID, x, y [, Largeur, Hauteur]) 
StopDrawing()
merci mais si on dois decouper 10 images il faut ça à chaque fois?

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 10:03
par TazNormand
Oui, tu peux utiliser une datasection pour stocker le numéro de sprite, les positions x et y et les largeurs, hauteurs de tes sprites à "découper". Ensuite tu boucles sur les valeurs de ta datasection

genre :

Code : Tout sélectionner

DataSection:
  MesSprites :
    data.i 1,0,0,32,32,2,32,0,32,32,3,64,0,128,64
Ici le premier sprite porte le numéro 1, démarre en 0,0 sur ton image, et a une largeur et une hauteur de 32 pixels.
Le second (numéro 2), démarre en 32,0 sur une largeur et hauteur de 32 pixels.
Le troisième (numéro 3), démarre en 64,0 mais a une largeur de 128 pixels sur une hauteur de 64 pixels.

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 10:14
par Micheao
Merci taz pour ton explication mon code ne marche toujours pas


image à téléchargé ici :
https://www.dropbox.com/s/4wq81lgwgcoj6ap/test.png?dl=0

Code : Tout sélectionner

EnableExplicit
UsePNGImageDecoder()
InitSprite()
InitMouse()
InitKeyboard()
InitMovie()
Enumeration
  #Main_Form
  #Image_Asset
  #Music
EndEnumeration
Global Event_Window,X,Y,ScreenW,ScreenH

OpenWindow(#Main_Form,0,0,800,600,"test image ",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Form),0,0,800,600)
LoadImage(#Image_Asset,"test.png")
GrabImage(#Image_Asset,1,0,0,800,600)
StartDrawing(SpriteOutput(1))
DrawImage(ImageID(1), 0 ,0 ,800, 600)
StopDrawing()
Repeat 
Repeat
  Event_Window=WindowEvent()
  Select Event_Window
    Case #PB_Event_CloseWindow
      End
  EndSelect
    Until Event_Window=0
    DisplaySprite(1, 0, 0)
    FlipBuffers()
      ClearScreen(RGB(0, 0, 0))
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 10:33
par falsam
Bonjour Micheao.

Dans ton code tu a

Code : Tout sélectionner

StartDrawing(SpriteOutput(1))
Hors tu n'as pas crée le sprite 1 !

Je m'attendais à une image animée mais apparement pas. Ceci dit je ne suis pas dans ta tête (et heureusement d'ailleurs. ça doit être un gros b****l chez toi[Mode je déconne hein ?])
J'ai respecté ta logique qui n'est pas la mienne et voila un code qui permet d'afficher ton sprite .

Code : Tout sélectionner

EnableExplicit
UsePNGImageDecoder()
InitSprite()
InitMouse()
InitKeyboard()
InitMovie()
Enumeration
  #Main_Form
  #Image_Asset
  #Music
EndEnumeration

Enumeration
  #Sprite
EndEnumeration

Global Event_Window,X,Y,ScreenW,ScreenH

OpenWindow(#Main_Form,0,0,800,600,"test image ",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Form),0,0,800,600)
LoadImage(#Image_Asset,"test.png")
GrabImage(#Image_Asset,1,0,0,800,600)

;Ton sprite n'est pas crée
CreateSprite(#Sprite, 800, 600)

StartDrawing(SpriteOutput(#Sprite))
DrawImage(ImageID(1), 0 ,0 ,800, 600)
StopDrawing()

Repeat 
Repeat
  Event_Window=WindowEvent()
  Select Event_Window
    Case #PB_Event_CloseWindow
      End
  EndSelect
    Until Event_Window=0
    DisplaySprite(#Sprite, 0, 0)
    FlipBuffers()
      ClearScreen(RGB(0, 0, 0))
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 10:45
par Micheao
Merci Falsam pour tes conseils

je sais pas faire d'image animée

par contre si on a 3 images par exemple à découpées et à afficher ensuite

faut'il mettre 3 fois en changement le numero du sprite? :

Code : Tout sélectionner

StartDrawing(SpriteOutput(#Sprite))
DrawImage(ImageID(1), 0 ,0 ,800, 600)
StopDrawing()

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 11:30
par TazNormand
Oui, sinon tu vas toujours écraser le même sprite.

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 13:50
par Micheao
Un grand merci pour vos conseils et votre aide

Petite question vous faites coment pour decouper les differentes parties de l'image

j'essaye de découper le cercle bleu de mon image et impossible de le decoupé.

https://www.dropbox.com/s/4wq81lgwgcoj6ap/test.png?dl=0

Re: Comment crée un sprite à partir de GrabImage?

Publié : ven. 25/sept./2015 16:15
par microdevweb
@Micheao,

Pour n'afficher qu'une partie du sprite tu doit utilisé avant DisplaySprite() ou DisplayTransparentSprite() la fonction ClipSprite(), c'est également le principe utilisable pour une animation

petit code exemple simple qui je l'espère t'aidera à comprendre

Code : Tout sélectionner

InitSprite()
InitKeyboard()
; Ouverture fenêtre et screen
OpenWindow(0,0,0,800,600,"Fonction ClipSprite",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,800,600)
; Ici je crée un sprite de 300 px qui va être divisé par après en 3
; et pourra donc affiché 3 sprites différents
CreateSprite(0,300,100)
StartDrawing(SpriteOutput(0))
; Ici un premier Carré Rouge
Box(0,0,100,100,RGB(255, 0, 0))
; Ici un carré jaune
Box(100,0,100,100,RGB(255, 255, 0))
; Ici un carré Bleu
Box(200,0,100,100,$FF901E)
StopDrawing()
X=0 
Repeat
      Repeat 
            Event=WindowEvent()
            If Event=#PB_Event_CloseWindow
                  End
            EndIf
      Until  Event=0
      ExamineKeyboard()
      If KeyboardPushed(#PB_Key_Escape)
            End
      EndIf
      ; Un petit Chrono pour le chagement de carré
      If  ElapsedMilliseconds()-TimeElapset>=900
            X+100
            If X>200
                  X=0
            EndIf
            ; Je découpe le sprite
            ClipSprite(0,X,0,100,100)
            TimeElapset=ElapsedMilliseconds()
      EndIf
      ClearScreen(RGB(0,0,0))
      DisplaySprite(0,400-150,300-150)
      FlipBuffers()
ForEver