Page 2 sur 5
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 11:33
par falsam
Après plusieurs tests, il apparaît que la gestion des sorites pose problème avec la version 5.30 ET la version 5.23.
Mon code étant trop long pour localiser le souci, je vais en faire un autre plus simple et court.
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 16:08
par majikeyric
Arf, ça craint du boudin

Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 17:20
par falsam
J'ai l'impression que c'est la fonction ClipSprite() suivi de DisplayTransparentSprite() qui provoque cet artefact à l'écran.
@majikeyric: Tu peux dire si c'est le cas dans ton code ?
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 17:36
par falsam
Voila un code de test que vous pouvez enregistrer et exécuter avec la version 5.22 puis 5.23 et enfin 5.30.
■ Ce code affiche 150 oiseaux. Vous aurez besoin de cette image dans le même dossier que le code.
Code : Tout sélectionner
Enumeration
#MainForm
EndEnumeration
Structure Sprite
Sprite.i
x.i
y.i
Animation.i
CurrentFrame.i
FrameWidth.i
FrameHeight.i
FrameMax.i
FrameRate.i
FrameTimeLife.i
EndStructure
Global MaxBirds=150, Dim Bird.Sprite(MaxBirds), RowAnim = 0
Procedure GamePreload()
UsePNGImageDecoder()
;Init birds
For n=0 To MaxBirds
With Bird(n)
\Sprite = LoadSprite(#PB_Any, "bird.png", #PB_Sprite_AlphaBlending)
\x = Random(1024, 0)
\y = Random(600, 0)
\Animation = RowAnim
\CurrentFrame=0
\FrameMax = 4
\FrameWidth = 64
\FrameHeight = 64
\FrameTimeLife = ElapsedMilliseconds()
\FrameRate = Random(130, 50)
EndWith
Next
EndProcedure
Procedure GameUpdate()
For n=0 To MaxBirds
With Bird(n)
ClipSprite(\Sprite, \CurrentFrame * \FrameWidth, \Animation * \FrameHeight, \FrameWidth, \FrameHeight)
DisplayTransparentSprite(\Sprite, \x, \y, 255)
If ElapsedMilliseconds()-\FrameTimeLife > \FrameRate
\FrameTimeLife = ElapsedMilliseconds()
If \CurrentFrame < \FrameMax-1
\CurrentFrame+1
Else
\CurrentFrame=0
EndIf
EndIf
EndWith
Next
EndProcedure
Procedure GameStart()
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Error", "Sprite system can't be initialized", 0)
End
EndIf
If OpenWindow(#mainform, 0, 0, 800, 600, "Bug Sprite", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(#mainform), 0, 0, 800, 600)
GamePreload()
EndIf
EndIf
Repeat
Repeat
Event = WindowEvent()
Select event
Case #PB_Event_CloseWindow
End
EndSelect
Until event=0
FlipBuffers()
ClearScreen(RGB(0,0,0))
ExamineKeyboard()
ExamineMouse()
GameUpdate()
Until KeyboardPushed(#PB_Key_Escape)
EndProcedure
GameStart()
Exécuté avec la version :
5.22 - Pas d'artéfact
5.23 - Artefact.
5.30 - Artefact.
■ L'artefact en image: Des triangles sur les ailes.
■ Ma carte vidéo est une NVidia
■ Vous pouvez faire un test en choisissant le rang à animer. Modifier la variable RowAnim = 0 par RowAnim = 3 par exemple.
■ le dossier compressé contient l'image et le code.
http://s242132022.onlinehome.fr/Downloa ... tefact.zip
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 17:38
par majikeyric
Je ne fais pas de clipSprite()...
Dans mon cas c'est le fait d'afficher certains sprites partiellement hors de l'écran qui crée l'artéfact (un mix entre 2 sprites).
Sur le forum anglais Demivec a mis en évidence le bug :
http://www.purebasic.fr/english/viewtop ... 92#p450292
Ton "triangle" ne vient pas d'un autre de tes sprites ?
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 17:42
par falsam
majikeyric a écrit :Ton "triangle" ne vient pas d'un autre de tes sprites ?
Dans l'exemple que je donne il n'y a qu'un seul sprite dupliqué 150 fois.
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 17:46
par majikeyric
Chez moi j'ai les même résultats que toi (sauf que je n'ai pas installé la 5.23). J'ai une radeon.
Je voulais dire que peut être le triangle provient d'un morceau "resizé" de l'une des images...
Dans mon cas, il y avait un mix entre le sprite du personnage et le sprite du pilonne qui passe en avant plan (car le pilonne était affiché en dehors de l'écran par DisplayTransparentSprite() )

Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 17:50
par Backup
Pour ma part, avec mon code pas de probleme ...
pourtant j'utilise ClipSprite
voir ici :
http://www.purebasic.fr/french/viewtopi ... _procedure
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 17:51
par falsam
@majikeyric: J'ai modifié le code pour n'afficher que 9 sprites Comme tu peux le voir sur cette image, il n'y a pas de superposition de sprite et il y a quand même cet artefact.
ça ne se produit qu'avec la version 5.23 et 5.30
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 17:53
par majikeyric
Tu n'affiches aucun sprite en dehors des limites de l'écran dans ton dernier code ? ou y en a juste 3 comme sur l'image ?
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 17:58
par majikeyric
Dans mon cas:
Le problème survient quand on affiche un sprite partiellement hors de l'écran ou complétement. Je ne parle pas de superposition.
Dans ton premier code, y a des oiseaux qui sont partiellement hors de l'écran donc c'est normal.
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 18:03
par majikeyric
Tes sprites sont dans les limites de l'écran donc c'est normal.
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 18:03
par falsam
majikeyric a écrit :Dans ton premier code, y a des oiseaux qui sont partiellement hors de l'écran donc c'est normal.
Oui c'est bien ça.
j'ai modifié cet extrait de code pour empécher les oiseaux de s'afficher même partiellement hors de la fenêtre et je n'ai plus cet artefact !!!
Pourtant ça fonctionne avec la version 5.22.
C'est embêtant pour un de mes codes ou j'avais un scrolling horizontal.
En bref ..... ce n'est pas un bug.
Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 18:04
par Backup
majikeyric a écrit :
Tes sprites sont dans les limites de l'écran donc c'est normal.
j'ai changé le code , pour faire sortir 2 sprites
réessaies

Re: Problème de sprites avec PB 5.30
Publié : jeu. 07/août/2014 18:06
par falsam
Dobro peut être que tu pourrais plutôt tester l'exemple que je fourni avec la version 5.23 et 5.30. J'ai ajouté un lien de téléchargement.