Sorting list of structure
Posted: Sat Dec 16, 2023 9:10 am
Hi there, I started using PureBasic yesterday for the first time.
I like it so far, but I have to get used to the syntax.
But I have a weird problem here, but perhaps I am overlookign something.
I created a function to define RenderObjects by passing position to draw a sprite. )With Z I want to sort the drawing order later):
Here are three objects I use:
But when I execute the drawing like that:
Thing is, the drawing order becomes something like that, here see the debug:
0 . 20 . 2
1 . 25 . 1
2 . 1 . 0
So apparently in second place is z=25, so depending on ascending or descending it should either be first or last, but ends up in the middle. Am I missing something?
I like it so far, but I have to get used to the syntax.
But I have a weird problem here, but perhaps I am overlookign something.
I created a function to define RenderObjects by passing position to draw a sprite. )With Z I want to sort the drawing order later):
Code: Select all
Procedure DefineRenderObjectAsImage(*rdrObject.RenderObject, ident$, x.i, y.i, sizeX.i, sizeY.i, z.i)
Static objId.i
*rdrObject\Id = objId.i
*rdrObject\ValId = GetImage(ident$)
*rdrObject\X = x
*rdrObject\Y = y
*rdrObject\Width = sizeX
*rdrObject\Height = sizeY
*rdrObject\Z = z
*rdrObject\Type = #Sprite
objId.i = objId.i + 1
EndProcedureCode: Select all
DefineRenderObjectAsImage(rdrObj1, "bia", 5, 5, 300, 300, 1)
DefineRenderObjectAsImage(rdrObj2, "bia", 155, 5, 600, 200, 25)
DefineRenderObjectAsImage(rdrObj3, "bia", 175, 85, 600, 200, 20)Code: Select all
Procedure RenderAll()
SortStructuredList(RENDERCONT\RenderObjs(), #PB_Sort_Ascending, OffsetOf(RenderObject\Z), TypeOf(RenderObject\Z))
Protected c.i = 0
ForEach RENDERCONT\RenderObjs()
Debug Str(c) + " . " + Str(RENDERCONT\RenderObjs()\Z) + " . " + Str(RENDERCONT\RenderObjs()\Id)
Select RENDERCONT\RenderObjs()\Type
Case #Sprite
DrawSprite(RENDERCONT\RenderObjs())
EndSelect
c = c + 1
; FreeMemory(RENDERCONT\RenderObjs())
Next
ClearList(RENDERCONT\RenderObjs())
EndProcedure0 . 20 . 2
1 . 25 . 1
2 . 1 . 0
So apparently in second place is z=25, so depending on ascending or descending it should either be first or last, but ends up in the middle. Am I missing something?