Page 1 sur 1

Trier des sprites verticalement

Publié : mer. 08/févr./2023 14:36
par drfloyd
Bonjour, j'ai un probleme de gros débutant : Trier l'affichage 2D vertical de sprites
Du moins je ne trouve pas de méthode efficace et rapide

J'ai 20 sprites en sx(20),sy(20)
Bien sur si je fais simplement ca :
for i=1 to 20
displaytransparentsprite( sprite(i) ,sx(i) ,sy(i), 255)
next
il y a des risque de chevauchement vertical si les sprites sont proches

Comment faire pour les afficher efficacement "dans l'ordre" vertical ? C'est à dire du haut de l'ecran (coordonnée y la plus faible) au bas de l'écran ?

Re: Trier des sprites verticalement

Publié : mer. 08/févr./2023 16:01
par Marc56
Si je comprend bien tu veux les aligner à la verticale sur toute la hauteur de l'écran ?

Quelque-chose comme ça ?

Code : Tout sélectionner

Screen_H = WindowHeight(0)
For i=1 To 20
   StartY = ( Screen_H / 21 ) * i 
   DisplayTransparentSprite( sprite(i) ,sx(i) ,Start_Y, 255)
Next
(pas testé)
:wink:

Re: Trier des sprites verticalement

Publié : mer. 08/févr./2023 16:15
par falsam
Je dois être tordu :mrgreen:
drfloyd a écrit : mer. 08/févr./2023 14:36 J'ai 20 sprites en sx(20),sy(20)
J'ai compris 20 sprites horizontaux et 20 verticaux.

Re: Trier des sprites verticalement

Publié : mer. 08/févr./2023 16:29
par Marc56
Je suis peut être aussi mal comprenant :mrgreen:
drfloyd, est-ce 20x20 sprites ? ou 20 en une colonne ?
(un bout d'exemple affichage initial, ce serait encore mieux)

Re: Trier des sprites verticalement

Publié : mer. 08/févr./2023 22:10
par drfloyd
hu ? je ne comprend pas que ca ne soit pas clair :mrgreen:

Non, c'est tout simple : j'ai 20 sprites (de la meme taille), ou peu importe, 25, 40 ou 120.... ils s'agitent tous à l'ecran

Mais je veux les afficher sans qu'un sprite plus haut à l'écran ne s'affiche après un sprite plus bas (bug visuel possible en cas de chevauchement si c'est le cas)

je veux juste trier l'ordre d'affichage de mes sprites

C'est vraiment pas clair ?

Re: Trier des sprites verticalement

Publié : mer. 08/févr./2023 22:40
par TazNormand
Salut

Pas sur d'avoir tout compris également...

Code : Tout sélectionner

; Afficher le 1er sprite où on veut : sx(1), sy(1) ?
displaytransparentsprite( sprite(1) ,sx(1) ,sy(1), 255)
for i=2 to 20
     posX=SpriteWidth(i-1)+1   ; largeur du sprite précédent + 1 pixel
     posY=SpriteHeight(i-1)+1  ; hauteur du sprite précédent + 1 pixel
     displaytransparentsprite( sprite(i), posX, posY, 255)
next
après, tu peux "jouer" avec une structure dans laquelle tu stockes tes infos par sprite (numéro, tailleX, tailleY, posX, posY,...)

Re: Trier des sprites verticalement

Publié : mer. 08/févr./2023 23:09
par case
un truc comme ca?

Code : Tout sélectionner

Structure monsprite
  id.i
  x.i
  y.i  
EndStructure
NewList sprites.monsprite()
; creation des faux sprites 
For m=0 To 19
  AddElement(sprites())
  sprites()\id=m 
  sprites()\x=Random(770,0)
  sprites()\y=Random(570,0)
Next
Debug" affichage des sprites dans l'ordre de creation "
ForEach sprites()
  Debug ""+sprites()\id +"> "+sprites()\x+","+sprites()\y
Next
Debug " affichage des sprites dans l'ordre Y"
SortStructuredList(sprites(),#PB_Sort_Ascending,OffsetOf(monsprite\y),#PB_Integer)
ForEach sprites()
  Debug ""+sprites()\id +"> "+sprites()\x+","+sprites()\y
Next

Re: Trier des sprites verticalement

Publié : jeu. 09/févr./2023 11:43
par Ar-S
Fais en sorte que tes sprites apparaissent en spriteEncoursY = spritePrecedentY + spritePrecedenHateur + 1
En structurant les données comme l'a mis case c'est assez simple

Re: Trier des sprites verticalement

Publié : jeu. 09/févr./2023 14:50
par Marc56
>> Si je comprend bien
>> Je dois être tordu
>> Je suis peut être aussi mal comprenant
>> hu ? je ne comprend pas que ca ne soit pas clair
>> Pas sur d'avoir tout compris également...
>> un truc comme ca?
:arrow: Voilà pourquoi les développeurs aiment travailler seuls.
On code dans le même langage, mais on ne parle pas la même langue :mrgreen:
français 1.0, français 2.0, français 3.01 LTS, français x86, français x64... :P

Re: Trier des sprites verticalement

Publié : jeu. 09/févr./2023 15:13
par Ollivier
G-Rom et blendman ont discuté de ça au début 2011.

Re: Trier des sprites verticalement

Publié : ven. 10/févr./2023 13:25
par G-Rom

Code : Tout sélectionner

Structure MonSprite
  sprite_id.l
  x.f
  y.f
  debug_nom.s
EndStructure

Global NewList MesSprites.MonSprite()

Procedure.i CreateMonSprite()
   AddElement(MesSprites())
  ProcedureReturn @MesSprites()
EndProcedure

Procedure FreeMonSprite(*s.MonSprite)
  ChangeCurrentElement(MesSprites(),*s)
  FreeSprite(*s\sprite_id)
  DeleteElement(MesSprites())  
EndProcedure


; ---- creation de tes sprites

For i = 0 To 9
  *sprite.MonSprite = CreateMonSprite()
  ;*sprite\sprite_id = LoadSprite(#PB_Any,"MonFichier")
  *sprite\y = Random(100)
  *sprite\debug_nom = "sprite_"+Str(i)
Next 


; ---- avant l'affichage
SortStructuredList(MesSprites(),#PB_Sort_Ascending , OffsetOf(MonSprite\y), #PB_Float)

ForEach MesSprites()
  Debug MesSprites()\debug_nom + "pos y = "  +Str(MesSprites()\y)
Next
exactement comme l'a fait case.

Re: Trier des sprites verticalement

Publié : sam. 11/févr./2023 4:09
par Ollivier
ça donne envie de participer. Mais moi, je vais devoir "tricher" : je vais devoir allumer un PC pour fournir un code. Je commence à perdre l'habitude d'écrire à la volée sur smartphone.