REM ******************************************
REM Project: Sprite Clipping
REM Author: Phaelax
REM Created: Wednesday, September 18, 2013
REM ******************************************
rem make a test image
box 1, 1, 400, 400, rgb(255,255,0),rgb(0,0,255),rgb(0,255,0),rgb(255,0,0)
get image 1, 1, 1, 400, 400
rem create a sprite
sprite 1, x, y, 1
sync on
do
cls
x = mousex()-200
y = mousey()-200
sprite 1, x, y, 1
clipSprite(1, 200,200,500,500)
outline(199,199,500,500)
print screen fps()
sync
loop
function clipSprite(id, x1, y1, x2, y2)
rem get sprite's original dimensions
img = sprite image(id)
w = image width(img)
h = image height(img)
rem sprite's current position
x = sprite x(id)
y = sprite y(id)
rem offsets
ox = 0
oy = 0
rem top of sprite
if y < y1
h1 = y1 - y
oy = -(y1-y)
endif
rem bottom of sprite
if y+h > y2
h2 = (y+h) - y2
endif
rem left side of sprite
if x < x1
w1 = x1 - x
ox = -(x1-x)
endif
rem right side of sprite
if x+w > x2
w2 = (x+w) - x2
endif
rem calculate new size of sprite
newHeight = h - h1 - h2
av# = h1 / (h+0.0)
bv# = 1 - h2 / (h+0.0)
newWidth = w - w1 - w2
au# = w1 / (w+0.0)
bu# = 1 - w2 / (w+0.0)
rem sprite size cannot be <= 0
if newWidth > 0 and newHeight > 0
rem update sprite texture coords
set sprite texture coord 1, 0, au#, av#
set sprite texture coord 1, 1, bu#, av#
set sprite texture coord 1, 2, au#, bv#
set sprite texture coord 1, 3, bu#, bv#
rem resize sprite
size sprite id, newWidth, newHeight
offset sprite id, ox, oy
show sprite id
else
hide sprite id
endif
endfunction
function outline(x1, y1, x2, y2)
line x1, y1, x2, y1
line x1, y2, x2, y2
line x1, y1, x1, y2
line x2, y1, x2, y2
endfunction