Problème de sprites avec PB 5.30

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème de sprites avec PB 5.30

Message 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.
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%
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Problème de sprites avec PB 5.30

Message par majikeyric »

Arf, ça craint du boudin :mrgreen:
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème de sprites avec PB 5.30

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

Re: Problème de sprites avec PB 5.30

Message 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.

Image

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.
Image

■ 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
Dernière modification par falsam le jeu. 07/août/2014 17:44, modifié 1 fois.
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%
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Problème de sprites avec PB 5.30

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

Re: Problème de sprites avec PB 5.30

Message 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.
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%
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Problème de sprites avec PB 5.30

Message 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() )

Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Problème de sprites avec PB 5.30

Message par Backup »

Pour ma part, avec mon code pas de probleme ...

pourtant j'utilise ClipSprite
voir ici :

http://www.purebasic.fr/french/viewtopi ... _procedure
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème de sprites avec PB 5.30

Message 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.

Image

ça ne se produit qu'avec la version 5.23 et 5.30
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%
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Problème de sprites avec PB 5.30

Message 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 ?
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Problème de sprites avec PB 5.30

Message 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.
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Problème de sprites avec PB 5.30

Message par majikeyric »

Dobro a écrit :Pour ma part, avec mon code pas de probleme ...

pourtant j'utilise ClipSprite
voir ici :

http://www.purebasic.fr/french/viewtopi ... _procedure
Tes sprites sont dans les limites de l'écran donc c'est normal.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème de sprites avec PB 5.30

Message 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.
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%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Problème de sprites avec PB 5.30

Message par Backup »

majikeyric a écrit :
Dobro a écrit :Pour ma part, avec mon code pas de probleme ...

pourtant j'utilise ClipSprite
voir ici :

http://www.purebasic.fr/french/viewtopi ... _procedure
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 :)
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème de sprites avec PB 5.30

Message 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.
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%
Répondre