The best way would be to alter the sprite texture coords/size. Here's an example sort of ported from my macro gui:
type SpriteViewport
left as integer
top as integer
right as integer
bottom as integer
endtype
type Sprt
posX as integer
posY as integer
sizeX as float
sizeY as float
endtype
global gSpriteViewport as SpriteViewport
gSpriteViewport.left = 192
gSpriteViewport.top = 128
gSpriteViewport.right = gSpriteViewport.left+512
gSpriteViewport.bottom = gSpriteViewport.top+368
global gSprite as Sprt
gSprite.posX = 256
gSprite.posY = 256
gSprite.sizeX = 128
gSprite.sizeY = 92
global gSpriteDrag as byte
global gDragX as integer
global gDragY as integer
sync on : sync rate 60
color backdrop 0
cls rgb(255,255,255)
ink rgb(0,128,192),0
box 2,2,gSprite.sizeX-2,gSprite.sizeY-2
ink 0,0
text 6,6,"HELLO EVERYONE"
get image 1,0,0,gSprite.sizeX,gSprite.sizeY,1
sprite 1,gSprite.posX,gSprite.posY,1
cls
do
// drag sprite
if mouseclick() = 0
gSpriteDrag = 0
gDragX = 0
gDragY = 0
endif
if mouseclick() and gSpriteDrag = 0
gSpriteDrag = 1
gDragX = mousex() - gSprite.posX
gDragY = mousey() - gSprite.posY
endif
if gSpriteDrag
gSprite.posX = mousex() - gDragX
gSprite.posY = mousey() - gDragY
endif
// set sprite corrds to fit only within boundaries
offsetLeft = 0
offsetTop = 0
offsetRight = 0
offsetBottom = 0
offsetSizeX = 0
offsetSizeY = 0
if gSprite.posX < gSpriteViewport.left then offsetLeft = gSpriteViewport.left - gSprite.posX
if (gSprite.posX+gSprite.sizeX) > gSpriteViewport.right then offsetRight = (gSprite.posX+gSprite.sizeX) - gSpriteViewport.right
if gSprite.posY < gSpriteViewport.top then offsetTop = gSpriteViewport.top - gSprite.posY
if (gSprite.posY+gSprite.sizeY) > gSpriteViewport.bottom then offsetBottom = (gSprite.posY+gSprite.sizeY) - gSpriteViewport.bottom
offsetSizeX = gSprite.sizeX - (offsetLeft+offsetRight)
offsetSizeY = gSprite.sizeY - (offsetTop+offsetBottom)
if offsetSizeX > 0 and offsetSizeY > 0
u0# = offsetLeft / gSprite.sizeX
u1# = offsetSizeX / gSprite.sizeX
v0# = offsetTop / gSprite.sizeY
v1# = offsetSizeY / gSprite.sizeY
sprite 1,gSprite.posX+offsetLeft,gSprite.posY+offsetTop,1
set sprite texture coord 1,0,u0# ,v0#
set sprite texture coord 1,1,u0#+u1#,v0#
set sprite texture coord 1,2,u0# ,v0#+v1#
set sprite texture coord 1,3,u0#+u1#,v0#+v1#
size sprite 1,offsetSizeX,offsetSizeY
show sprite 1
else
hide sprite 1
endif
// draw sprite shadow
ink rgb(52,52,52),0
box gSprite.posX,gSprite.posY,gSprite.posX+offsetSizeX+offsetRight+offsetLeft,gSprite.posY+offsetSizeY+offsetBottom+offsetTop
// dtaw boundaries
ink rgb(255,0,0),0
box gSpriteViewport.left-2,gSpriteViewport.top-2,gSpriteViewport.right+2,gSpriteViewport.bottom+2
ink rgb(32,32,32),0
box gSpriteViewport.left,gSpriteViewport.top,gSpriteViewport.right,gSpriteViewport.bottom
ink rgb(255,255,255),0
set cursor 0,0
print "Hold Mouse to Move Sprite"
print "[Sprite Coords]"
print "u0#: "+str$(u0#)
print "u1#: "+str$(u1#)
print "v0#: "+str$(v0#)
print "v1#: "+str$(v1#)
sync
loop
A dream is a fantasy, if you achieve that fantasy it was never a dream to begin with.