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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

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 .
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message par Ar-S »

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...
~~~~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
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

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

Message par microdevweb »

@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()
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

Merci c'est pas évident de comprendre entre GrabImage, GrabSprite, ClipSprite
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

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

Message par G-Rom »

c'est la même chose ^^
imagine que cette fonction est une paire de ciseaux.
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

Ar-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...
Facile à faire pour toi mais pas pour moi

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]
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message par falsam »

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

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%
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

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 :

Code : Tout sélectionner

  x + 1
  If x > ScreenWidth()
    x = -222
merci encore de ton super cours qui peux sert de tuto .
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

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

Message par microdevweb »

@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)
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

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

Code : Tout sélectionner

 x + 1
  If x > ScreenWidth()
    x = -222
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

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

Message par microdevweb »

Code : Tout sélectionner

X + 1 
--> Déplace le sprite vers la droite

Code : Tout sélectionner

If x > ScreenWidth()
--> Si le sprite sort de l'écran d'affichage

Code : Tout sélectionner

x = -222
--> Recule le sprite de 222 pixel vers la gauche

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
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

merci microdevweb pour tes explication et si on veux stoppé le sprite au milieu de l'écran?
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

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

Message par microdevweb »

Avec une boucle conditionnel
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
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

Merci mais dans une animation sans les touches du clavier comment on fait pour arreter le sprite
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message par Ar-S »

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

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
Répondre