This next bit of code goes immediately after the setSpriteDepth() command at the end of the getPointerState() loop.
if WorldToScreenY( thisY#) >= getTextY( panelText() )
ShowTrashCan( thisSpritePicked )
else
HideTrashCan()
endif
If the object is below that point (i.e Y is greater than the top of the text), it calls a function called ShowTrashCan() and passes the reference of the sprite being dragged to it.
If it is not, it calls a function called HideTrashCan() - in case the last time it checked, it showed the trashcan.
It's not hard to guess what these functions do.
For this to work, firstly we need another place to store a new Sprite. Again, this will be in the Display UDT, which now looks like this.
type displayType
physWidth#
physHeight#
virtWidth#
virtHeight#
iconSize#
textHeight#
lastFPS#
iconImage
pointDX#
pointDY#
pointWX#
pointWY#
highSprite
endtype
This needs to be initialised with the other display fields at the start of the program.
display.highSprite = 0
function HighSprite()
endfunction display.highSprite
function HideTrashCan()
if HighSprite() > 0
if getSpriteExists( HighSprite() ) then deleteSprite( HighSprite() )
display.highSprite = 0
endif
endfunction
This simply checks if the value in the .highSprite field is greater than zero. If so it checks if it is assigned to a sprite and if so it deletes that sprite. It then sets the value to zero.
The ShowTrashCan() function takes a sprite reference as it's parameter and pops a trashcan in front of it.
function ShowTrashCan( thisSprite )
if thisSprite > 0
if getSpriteExists ( thisSprite )
HideTrashCan()
display.highSprite = cloneSprite( thisSprite )
setSpriteFrame( HighSprite() , 252 )
setSpriteDepth( HighSprite() , getSpriteDepth( HighSprite() ) - 1)
endif
endif
endfunction
It checks to see if the parameter passed is non-zero. If so, it checks that a sprite exists with that reference.
If the sprite exists, it then calls the HideTrashCan() function to delete any sprite that may already exist and then clones the sprite passed using the cloneSprite() command, storing the reference of the clone in the .highsprite field.
Using cloneSprite(), duplicates all the parameters of an existing sprite such as position, offset, size, animation and depth and is much easier than creating a new sprite and copying the parameters individually.
It then changes the frame of the clone to 252, which is the trashcan, and sets its depth to one on front of what it was - positioning the trashcan in front of the sprite originally passed.
Now if you drag an object over the panel or it's title, you get this.
These new functions look like this in the program.
No comments:
Post a Comment