[Résolu]Comment crée un sprite à partir de GrabImage?
Re: Comment crée un sprite à partir de GrabImage?
Merci de ton aide ce que je veux faire c'est quand on crée une planche de sprites c'est de pouvoir les découpés et les afficher ensuite .
Re: Comment crée un sprite à partir de GrabImage?
Tu copies 5 fois ton sprite (s'il contient 5 images par exemple)
Ensuite tu peux utiliser clipsprite() pour créer les 5 séparément et les faire apparaitres en même temps ou pas...
Ensuite tu peux utiliser clipsprite() pour créer les 5 séparément et les faire apparaitres en même temps ou pas...
~~~~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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Comment crée un sprite à partir de GrabImage?
@Micheao,
C'est ce que je te montre dans le petit code exemple, dans ce cas j'ai dessiné des carrés mais ils est évident que tu peux faire la même chose avec des images. Avec ton soft de dessin tu crée une image avec tout tes sprites (de préférence base 2 donc 16*16 ou 32 * 32 ou 64 *64 etc...) après tu ouvre ce dessin avec LoadSprite() attention d'utiliser UsePngDecoder() avant si image png. Après tu passe d'un sprite à l'autre avec ClipSprite()
C'est ce que je te montre dans le petit code exemple, dans ce cas j'ai dessiné des carrés mais ils est évident que tu peux faire la même chose avec des images. Avec ton soft de dessin tu crée une image avec tout tes sprites (de préférence base 2 donc 16*16 ou 32 * 32 ou 64 *64 etc...) après tu ouvre ce dessin avec LoadSprite() attention d'utiliser UsePngDecoder() avant si image png. Après tu passe d'un sprite à l'autre avec ClipSprite()
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Comment crée un sprite à partir de GrabImage?
Merci c'est pas évident de comprendre entre GrabImage, GrabSprite, ClipSprite
Re: Comment crée un sprite à partir de GrabImage?
c'est la même chose ^^
imagine que cette fonction est une paire de ciseaux.
imagine que cette fonction est une paire de ciseaux.
Re: Comment crée un sprite à partir de GrabImage?
Facile à faire pour toi mais pas pour moiAr-S a écrit :Tu copies 5 fois ton sprite (s'il contient 5 images par exemple)
Ensuite tu peux utiliser clipsprite() pour créer les 5 séparément et les faire apparaitres en même temps ou pas...
ce que je veux faire c'est de decoupé le fond et ensuite le rond bleu et affiche le tout
[img]https://www.dropbox.com/s/4wq81lgwgcoj6ap/test.png?dl=0[/img]
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Comment crée un sprite à partir de GrabImage?
Hello micheao : Je vois que tu avances dans ta découverte du 2D
Allez, un petit coup de main.
Ton Sprite Sheeet (Image contenant plusieurs sprites ou animations) contient 2 sprites.
1 - Un sprite qui représente le fond de ton animation.
Il est positionné position x=0 y=0 pour une taille de 800 x 600
2 - Un Sprite représentant un cercle (Presque un cercle)
Il est positionné sur ton Sprite Sheet en x=94 y=680 pour une taille de 222 x 195
Pour extraire ces deux sprites, tu vas utiliser la fonction ClipSprite().
Exemple pour le premier Sprite (#Sprite1) ClipSprite(#Sprite1, 0, 0, 800, 600)
Tu l'as compris, cette fonction découpe un carré qui commence en x=0 y=0 pour une taille de 800 x 600
Il te suffit ensuite de l'afficher avec la fonction classique DisplaySprite()
Pour le deuxième sprite (#Sprite2) c'est le même principe mais
comme c'est un rectangle, Il va falloir supprimer la couleur de fond noir.
Pour cela tu va utiliser la fonction TransparentSpriteColor() et indiquer pour ce sprite la couleur à rendre transparent.
Ce qui donnera TransparentSpriteColor(#Sprite2, RGB(0,0,0)).
Etant donné que tu va obtenir un sprite utilisant un fond transparent, tu vas l'afficher avec la fonction DisplayTransparentSprite()
■ Le code
Allez, un petit coup de main.
Ton Sprite Sheeet (Image contenant plusieurs sprites ou animations) contient 2 sprites.
1 - Un sprite qui représente le fond de ton animation.
Il est positionné position x=0 y=0 pour une taille de 800 x 600
2 - Un Sprite représentant un cercle (Presque un cercle)
Il est positionné sur ton Sprite Sheet en x=94 y=680 pour une taille de 222 x 195
Pour extraire ces deux sprites, tu vas utiliser la fonction ClipSprite().
Exemple pour le premier Sprite (#Sprite1) ClipSprite(#Sprite1, 0, 0, 800, 600)
Tu l'as compris, cette fonction découpe un carré qui commence en x=0 y=0 pour une taille de 800 x 600
Il te suffit ensuite de l'afficher avec la fonction classique DisplaySprite()
Pour le deuxième sprite (#Sprite2) c'est le même principe mais

Pour cela tu va utiliser la fonction TransparentSpriteColor() et indiquer pour ce sprite la couleur à rendre transparent.
Ce qui donnera TransparentSpriteColor(#Sprite2, RGB(0,0,0)).
Etant donné que tu va obtenir un sprite utilisant un fond transparent, tu vas l'afficher avec la fonction DisplayTransparentSprite()
■ Le code
Code : Tout sélectionner
EnableExplicit
UsePNGImageDecoder()
InitSprite()
InitMouse()
InitKeyboard()
InitMovie()
Enumeration
#Main_Form
#Sprite1
#Sprite2
EndEnumeration
Global Event_Window,X,Y
OpenWindow(#Main_Form,0,0,800,600,"Test ClipSprite ",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Form),0,0,800,600)
;Chargement du Sprite Sheet pour le sprite 1 et 2
LoadSprite(#Sprite1, "test.png")
LoadSprite(#Sprite2, "test.png")
;Préparation du premier sprite
;Elle commence en x=0 y=0 avec une taille de 800 x 600
ClipSprite(#Sprite1, 0, 0, 800, 600)
;Création du deuxiéme sprite
;Elle commence en x=94 y=680 avec une taille de 222 x 195
ClipSprite(#Sprite2, 94, 680, 222, 195)
;La couleur de transparence pour ce 2eme sprite est le noir
TransparentSpriteColor(#Sprite2, RGB(0,0,0))
Repeat
Repeat
Event_Window=WindowEvent()
Select Event_Window
Case #PB_Event_CloseWindow
End
EndSelect
Until Event_Window=0
;Affichage du premier sprite
DisplaySprite(#Sprite1, 0, 0)
;Affichage du deuxiéme sprite
;Attention : On a défini le noir comme étant la couleur de transparence
DisplayTransparentSprite(#Sprite2, x, 0)
FlipBuffers()
;Defilement du sprite
x + 1
If x > ScreenWidth()
x = -222
EndIf
ClearScreen(RGB(0, 0, 0))
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Comment crée un sprite à partir de GrabImage?
Bonjour
Un grand merci falsam tu es un super prof , j'ai beaucoup appris la 2D
mais tu sais les coordonnées pour decouper le cercle?
au autre question : si j'ai bien compris tu charge 2 fois l'image de base est ce que ensuite une fois les sprites crée et decoupés on peux mettre FreeImage(#image) pour la liberer l'image en mémoire ?
Peux tu m'expliquer clairement ceci svp :
merci encore de ton super cours qui peux sert de tuto .
Un grand merci falsam tu es un super prof , j'ai beaucoup appris la 2D
mais tu sais les coordonnées pour decouper le cercle?
au autre question : si j'ai bien compris tu charge 2 fois l'image de base est ce que ensuite une fois les sprites crée et decoupés on peux mettre FreeImage(#image) pour la liberer l'image en mémoire ?
Peux tu m'expliquer clairement ceci svp :
Code : Tout sélectionner
x + 1
If x > ScreenWidth()
x = -222
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Comment crée un sprite à partir de GrabImage?
@Micheao,
1)Tu ne saurais pas découper un cercle, mais tu prends le cercle dans une zone rectangulaire avec un fond alpha, donc quant tu affichera ton sprite avec DisplayTransparentSprite() on ne verra que le cercle.
2) Tu ne dois pas libérer ta planche de sprite chargée avec LoadSprite(), tu ne dois pas confondre la bibliothèque de dessin 2D et la bibliothèque de sprite 2D. Tu peux dessiner dans un sprite avec des fonction de dessin comme si il dans n'importe quel image, mais les fonction de dessin non aucun effet sur les sprite, donc exemple freeImage(#id_sprite) ne fonctionnera pas tu doit utilisé FreeSprite(#Id_sprite)
1)Tu ne saurais pas découper un cercle, mais tu prends le cercle dans une zone rectangulaire avec un fond alpha, donc quant tu affichera ton sprite avec DisplayTransparentSprite() on ne verra que le cercle.
2) Tu ne dois pas libérer ta planche de sprite chargée avec LoadSprite(), tu ne dois pas confondre la bibliothèque de dessin 2D et la bibliothèque de sprite 2D. Tu peux dessiner dans un sprite avec des fonction de dessin comme si il dans n'importe quel image, mais les fonction de dessin non aucun effet sur les sprite, donc exemple freeImage(#id_sprite) ne fonctionnera pas tu doit utilisé FreeSprite(#Id_sprite)
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Comment crée un sprite à partir de GrabImage?
Merci Microweb pour tes explications
si j'ai bien compris FreeSprite(#Id_sprite) permet de liberer de la mémoire ?
Peux tu m"expliquer ceci : Svp
si j'ai bien compris FreeSprite(#Id_sprite) permet de liberer de la mémoire ?
Peux tu m"expliquer ceci : Svp
Code : Tout sélectionner
x + 1
If x > ScreenWidth()
x = -222
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Comment crée un sprite à partir de GrabImage?
Code : Tout sélectionner
X + 1
Code : Tout sélectionner
If x > ScreenWidth()
Code : Tout sélectionner
x = -222
FreeSprite() libère la mémoire en effet, mais après son utilisation tu n'a plus accès au sprite, donc à n’utilisè que dans certains cas précis; Exemple, le joueur tire une bale, quant la bale sort du jeu tu l'efface
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Comment crée un sprite à partir de GrabImage?
merci microdevweb pour tes explication et si on veux stoppé le sprite au milieu de l'écran?
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Comment crée un sprite à partir de GrabImage?
Avec une boucle conditionnel
Ex:
Ex:
Code : Tout sélectionner
SpriteOn.b=#True ;Flag qui détermine si le sprite avance ou pas
ExamineKeyboard()
; Si presse la touche Espace arrête le sprite
If KeyboardPushed(#PB_Key_Space)
SpriteOn=#False
EndIf
; Si la touche Espace est relachée redémare le sprite
If KeyboardReleased(#PB_Key_Space)
SpriteOn=#True
EndIf
If SpiteOn
X+1
EndIf
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Comment crée un sprite à partir de GrabImage?
Merci mais dans une animation sans les touches du clavier comment on fait pour arreter le sprite
Re: Comment crée un sprite à partir de GrabImage?
Si tu es dans une fenetre qui fait 800 de large, la moitié c'est 400
Si ton sprite fait 40, le milieu est à 20
Donc le milieu de ton ecran - le milieu de ton sprite donne 400 - 20 = 380
Tu dois arreter ton sprite à x=380
Il te faut indiquer au programme que tu stop à ce moment, tu peux le faire de plusieurs façons.
Je te conseils d'utiliser un flag (drapeau) ou pour être plus claire un marqueur STOP
ça te donnerai
Si ton sprite fait 40, le milieu est à 20
Donc le milieu de ton ecran - le milieu de ton sprite donne 400 - 20 = 380
Tu dois arreter ton sprite à x=380
Il te faut indiquer au programme que tu stop à ce moment, tu peux le faire de plusieurs façons.
Je te conseils d'utiliser un flag (drapeau) ou pour être plus claire un marqueur STOP
ça te donnerai
Code : Tout sélectionner
If STOP = #False ; Le marqueur stop est à 0 donc ....
x+1 ; ... ton sprite avance de 1
If x = 380 ; s'il atteint 380
STOP = #True ; Le marqueur STOP passe à 1 donc ton sprite n'avancera plus
EndIf
EndIf
Dernière modification par Ar-S le sam. 26/sept./2015 15:58, modifié 1 fois.
~~~~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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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