Trier des sprites verticalement
Trier des sprites verticalement
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 ?
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
Si je comprend bien tu veux les aligner à la verticale sur toute la hauteur de l'écran ?
Quelque-chose comme ça ?(pas testé)

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

- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Trier des sprites verticalement
Je dois être tordu

J'ai compris 20 sprites horizontaux et 20 verticaux.
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%
Re: Trier des sprites verticalement
Je suis peut être aussi mal comprenant
drfloyd, est-ce 20x20 sprites ? ou 20 en une colonne ?
(un bout d'exemple affichage initial, ce serait encore mieux)

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
hu ? je ne comprend pas que ca ne soit pas clair
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 ?

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 ?
- TazNormand
- Messages : 1297
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Re: Trier des sprites verticalement
Salut
Pas sur d'avoir tout compris également...
après, tu peux "jouer" avec une structure dans laquelle tu stockes tes infos par sprite (numéro, tailleX, tailleY, posX, posY,...)
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
Re: Trier des sprites verticalement
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
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
En structurant les données comme l'a mis case c'est assez simple
~~~~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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
Re: Trier des sprites verticalement
>> 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?

On code dans le même langage, mais on ne parle pas la même langue

français 1.0, français 2.0, français 3.01 LTS, français x86, français x64...

Re: Trier des sprites verticalement
G-Rom et blendman ont discuté de ça au début 2011.
Re: Trier des sprites verticalement
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
Re: Trier des sprites verticalement
ç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.