Trier des sprites verticalement

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Trier des sprites verticalement

Message 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 ?
Marc56
Messages : 2196
Inscription : sam. 08/févr./2014 15:19

Re: Trier des sprites verticalement

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

Re: Trier des sprites verticalement

Message 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.
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%
Marc56
Messages : 2196
Inscription : sam. 08/févr./2014 15:19

Re: Trier des sprites verticalement

Message 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)
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Re: Trier des sprites verticalement

Message 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 ?
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Trier des sprites verticalement

Message 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,...)
Image
Image
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Re: Trier des sprites verticalement

Message 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
ImageImage
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Trier des sprites verticalement

Message 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
~~~~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
Marc56
Messages : 2196
Inscription : sam. 08/févr./2014 15:19

Re: Trier des sprites verticalement

Message 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
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Trier des sprites verticalement

Message par Ollivier »

G-Rom et blendman ont discuté de ça au début 2011.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Trier des sprites verticalement

Message 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.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Trier des sprites verticalement

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