You can set the place where the sprite is visible

. All pixels out of this aera aren't displayed.
sync on
sync rate 60
rem image
box 0,0,128,128,rgb(255,0,0),rgb(0,255,0),rgb(0,0,255),rgb(255,0,255)
get image 1,0,0,128,128
boundxmin=128 : boundxmax=384
boundymin=128 : boundymax=384
do
cls
sprite 1,mousex(),mousey(),1
bounds( 1, 128,128 , boundxmin,boundxmax , boundymin,boundymax )
line 0,boundymin,640,boundymin
line 0,boundymax,640,boundymax
line boundxmin,0,boundxmin,480
line boundxmax,0,boundxmax,480
sync
loop
function bounds( nsprite , xsize,ysize , xmin,xmax , ymin,ymax )
y=sprite y(nsprite)
x=sprite x(nsprite)
rem Bound Y
rem -down
if y+ysize>ymax then ymax#=(ysize-(y+ysize-ymax))*1.0/ysize else ymax#=1
rem -up
if y<ymin then ymin#=(ymin-y)*1.0/ysize
if y>ymax then ymax#=0 : ymin#=0
if y<ymin-ysize then ymax#=0 : ymin#=0
rem Bound X
rem -left
if x+xsize>xmax then xmax#=(xsize-(x+xsize-xmax))*1.0/xsize else xmax#=1
rem -right
if x<xmin then xmin#=(xmin-x)*1.0/xsize
if x<xmin-xsize then xmax#=0 : xmin#=0
if x>xmax then xmax#=0 : xmin#=0
rem new size
size sprite nsprite,xsize*abs(xmax#-xmin#),ysize*abs(ymax#-ymin#)
rem new position
sprite nsprite,x+(xmin#)*xsize,y+(ymin#)*ysize,1
rem new uv
SET SPRITE TEXTURE COORD nsprite,0,xmin#,ymin#
SET SPRITE TEXTURE COORD nsprite,1,xmax#,ymin#
SET SPRITE TEXTURE COORD nsprite,2,xmin#,ymax#
SET SPRITE TEXTURE COORD nsprite,3,xmax#,ymax#
endfunction