Sunday, October 18, 2015

How do I move an existing display object behind another in Corona Lua?


If I have two existing display objects in Corona, lets say do1 and do2. Assume do1 is drawn first then do2, so do2 will be on top.


Is there a way to say "put do2 behind do1" in corona Lua? If yes can you give me an example?



Answer



If do1 and do2 are in a display group they appear in the order you insert them as:


local group = display.newGroup()

group:insert(do1)
group:insert(do2)

Groups are also numerically indexed and the objects are in display order based on the index:


assert(group[1] == do1) -- do1 is on the bottom
assert(group[2] == do2) -- do2 is on the top (front)

If you happen to add your items out of order, you can move another item to the top in a number of ways:


local group = display.newGroup()
group:insert(do2) -- do2 is on the bottom

group:insert(do1) -- do1 is on the top (front)

-- Move do2 to front by re-inserting it - only one instance will exist in group
group:insert(do2)

assert(group[1] == do1) -- do1 is on the bottom
assert(group[2] == do2) -- do2 is on the top (front)

-- Move do2 to the front


do2:toFront()

assert(group[1] == do1) -- do1 is on the bottom
assert(group[2] == do2) -- do2 is on the top (front)

-- Move do2 to the back

do2:toBack()

assert(group[1] == do2) -- do2 is on the bottom

assert(group[2] == do1) -- do1 is on the top (front)

See also toFront() and toBack().


You an only put items in the front or back. As far as I know there's no way to arbitrarily place items. You can however maintain display order in another list and insert them based on that order.


No comments:

Post a Comment

Simple past, Present perfect Past perfect

Can you tell me which form of the following sentences is the correct one please? Imagine two friends discussing the gym... I was in a good s...