Bonjour
j'ai essayé modifier le mini tuto de Taz j'ai juste rajouter une image de fond mon probleme c'est que l'image flash et le sprite n'est pas transparent
j'ai passé la journée a essayé de le mettre transparent j'ai pas reussi malgré je l'ai lu doc
ce que je veux faire c'est mettre ce fond et que le texte defile sans le cadre autour de lui bréve qu'il soit transparent merci si tu peux m'aider
https://www.dropbox.com/s/kutwnjka5kzcl ... e.zip?dl=0
merci de votre aide
[RESOLU]Probleme avec un bout de code d'affichage de Sprite
[RESOLU]Probleme avec un bout de code d'affichage de Sprite
Dernière modification par Micheao le mar. 22/sept./2015 19:07, modifié 1 fois.
Re: Probleme avec un bout de code
Il ne faut pas mettre une image de fond en sprite, mais la dessiner sur le screen avec StartDrawing(ScreenOutput()).
Il faut vraiment comprendre qu'un sprite doit être une petite image même si on a la possibilité de créer de gros sprites car cette image sera stockée dans la mémoire de la carte graphique. Pour ne pas aller au devant de problèmes, il faut voir un sprite comme un personnage, c'est à dire une petite image qui sera traitée et affichée souvent et rapidement.
Avec le code ci-dessous, je n'ai pas de scintillement, tout est ok et fluide.
[Edition] J'ai ajouté la transparence
M.
Il faut vraiment comprendre qu'un sprite doit être une petite image même si on a la possibilité de créer de gros sprites car cette image sera stockée dans la mémoire de la carte graphique. Pour ne pas aller au devant de problèmes, il faut voir un sprite comme un personnage, c'est à dire une petite image qui sera traitée et affichée souvent et rapidement.
Avec le code ci-dessous, je n'ai pas de scintillement, tout est ok et fluide.
Code : Tout sélectionner
InitKeyboard()
InitMouse()
InitSprite()
UseJPEGImageDecoder()
Enumeration
#Fond
EndEnumeration
; taille de notre écran graphique
Global scrW.i=800 ; largeur en pixels
Global scrH.i=600 ; hauteur en pixels
; variables de déplacement
x.i=scrW + 64 ; positions x correspond à largeur de notre écran + largeur du sprite
y.i=Int(scrH/2) ; position y correspond au milieu vertical de notre écran graphique
If OpenScreen(scrW,scrH,32,"Tuto simpliste")
; on va déplacer notre sprite grace à x et y
; LoadSprite(#Fond,"Fond.jpg")
; DisplaySprite(#Fond,0,0)
;<===========================================================>
fond=LoadImage(0,"Fond.jpg")
;<===========================================================>
; création du sprite
CreateSprite(0,225,64,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(0))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0,0,225,64,RGBA(0,0,0,0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
;#PB_2DDrawing_AlphaClip pour faire un "trou" dans l'image de fond
DrawText(5,10,"Test de Sprite",RGBA(255,255,255,255),RGBA(0,0,0,0));
DrawingMode(#PB_2DDrawing_Default )
StopDrawing()
; on boucle jusqu'à ce que l'utilisateur clique sur le bouton gauche ou appuie sur la touche escape
Repeat
; on efface l'écran avec un fond noir
;ClearScreen(RGB(0,0,0))
;<===========================================================>
StartDrawing(ScreenOutput())
DrawImage(ImageID(0),0,0)
StopDrawing()
;<===========================================================>
; on examine les entrées clavier et souris
ExamineKeyboard()
ExamineMouse()
; on affiche notre sprite
DisplayTransparentSprite(0, X, Y, 255)
;DisplaySprite(0,x,y)
; on décrémente x pour faire défiler vers la droite
x-2; plus x est petit plus le scroll est lent, et donc plus x est grand plus c'est rapide
; on inverse les buffers
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Left)
; on décrémente x pour faire défiler vers la droite
x-2; plus x est petit plus le scroll est lent, et donc plus x est grand plus c'est rapide
; on teste si notre sprite est sorti de l'écran par la droite
; c'est à dire position 0 moins taille du sprite (0-64 => -64)
; si c'est le cas on remet x à scrW+taille du sprite (1024+64=>1088)
If x<-0
x=scrW-12
EndIf
EndIf
End
M.
Re: Probleme avec un bout de code
Merci mesa pour ton aide j'en apprend tous les jours sur les sprites
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Probleme avec un bout de code
@Mesa : Pas top ton code. Ca scintille.
@Micheao.
■ Ton titre Problème avec un bout de code n'est pas très explicite.
Modifie ton titre par Problème d'affichage de sprite. Au moins on sait dans quel domaine nous allons opérer.
■ Quelques erreurs dans ce code.
- 0 et #Fond ont le même identifiant. Si tu Debug #Fond, tu auras la valeur 0 tout comme ton sprite 0.
- Si tu crées des sprites transparents alors tu dois aussi activer le décodeur adéquates. UsePNGImageEncoder()
- L'affichage des sprites doit se faire dans la boucle événementielle et non pas avant la boucle.
- Utilises DisplayTransparentSprite() pour afficher un sprite transparent.
J'ai enlevé ce qui ne servait à rien, ajouté la constante #SpriteTest, et mis dans l'ordre la séquence d'affichage.
Tu regarderas bien la manière de créer un sprite transparent.Plus de scintillement de sprite.
@Micheao.
■ Ton titre Problème avec un bout de code n'est pas très explicite.
Modifie ton titre par Problème d'affichage de sprite. Au moins on sait dans quel domaine nous allons opérer.
■ Quelques erreurs dans ce code.
- 0 et #Fond ont le même identifiant. Si tu Debug #Fond, tu auras la valeur 0 tout comme ton sprite 0.
- Si tu crées des sprites transparents alors tu dois aussi activer le décodeur adéquates. UsePNGImageEncoder()
- L'affichage des sprites doit se faire dans la boucle événementielle et non pas avant la boucle.
- Utilises DisplayTransparentSprite() pour afficher un sprite transparent.
J'ai enlevé ce qui ne servait à rien, ajouté la constante #SpriteTest, et mis dans l'ordre la séquence d'affichage.
Tu regarderas bien la manière de créer un sprite transparent.
Code : Tout sélectionner
InitKeyboard()
InitMouse()
InitSprite()
UseJPEGImageDecoder()
UsePNGImageEncoder()
Enumeration
#Fond
#SpriteTest
EndEnumeration
; taille de notre écran graphique
Global scrW.i=800 ; largeur en pixels
Global scrH.i=600 ; hauteur en pixels
; variables de déplacement
x.i=scrW + 64 ; positions x correspond à largeur de notre écran + largeur du sprite
y.i=Int(scrH/2) ; position y correspond au milieu vertical de notre écran graphique
If OpenScreen(scrW, scrH, 32, "Tuto simpliste")
LoadSprite(#Fond,"Fond.jpg")
; création du sprite
CreateSprite(#SpriteTest, 225, 64, #PB_Sprite_AlphaBlending)
; Dessin dans le sprite
StartDrawing(SpriteOutput(#SpriteTest))
;Important : Dessin du fond transparent (Couleur RGBA Obligatoire)
;Le dernier parametre de RGBA définit la transparence (0 -> 255)
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, 225, 64, RGBA(0, 0, 0, 0))
;Dessin du texte avec fond transparent (Couleur RGBA Obligatoire)
DrawText(5,10,"Test de Sprite", RGBA(255, 255, 255, 255), RGBA(255, 255, 255, 0))
StopDrawing()
; on boucle jusqu'à ce que l'utilisateur clique sur le bouton gauche ou appuie sur la touche escape
Repeat
;Affichage des sprites
DisplaySprite(#Fond, 0, 0)
DisplayTransparentSprite(#SpriteTest, x, y, 255)
; on décrémente x pour faire défiler vers la droite
x-2; plus x est petit plus le scroll est lent, et donc plus x est grand plus c'est rapide
If x < 0
x = ScreenWidth()
EndIf
; on inverse les buffers
FlipBuffers()
ClearScreen(RGB(0, 0, 0))
ExamineKeyboard()
ExamineMouse()
Until KeyboardPushed(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Left)
EndIf
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%
- TazNormand
- Messages : 1297
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Re: Probleme avec un bout de code
Sans utiliser le décodeur PNG, Falsam, tu peux aussi juste préciser la couleur de transparence de ton sprite avec
Sinon, même remarque que Mesa : le sprite en fond c'est pas l'idéal.
En tous cas, continue, même si ta "démo" ne révolutionne pas le genre, elle aura au moins le mérite de fêter l'anniversaire de PureBasic
Code : Tout sélectionner
TransparentSpriteColor(#sprite,color)
En tous cas, continue, même si ta "démo" ne révolutionne pas le genre, elle aura au moins le mérite de fêter l'anniversaire de PureBasic

Re: Probleme avec un bout de code d'affichage de Sprite
Merci de votre aide c'est pas évident les sprites