You are not logged in.
Pages: 1
The other function I've created for my newest game that might be nice for others:
/*
** Usage:
** sprite_resize(sprite,xscale,yscale,scaleoffset)
**
** Arguments:
** sprite sprite to change
** xscale new xscale
** yscale new yscale
** scaleoffset wether to scale the offset (so the relative offset stays the same
**
** Returns:
** (-1) on error
**
** Notes:
** For smoother sprites make sure to set interpolation on!
** GMLscripts.com
*/
{
var sprite,xscale,yscale,dx,dy,offscale,w,h,n,p,s,l,xo,yo,surf,i,newsprite,alphasprite;
sprite = argument0;
xscale = argument1;
yscale = argument2;
offscale = argument3;
w = sprite_get_width(sprite)*abs(xscale);
h = sprite_get_height(sprite)*abs(yscale);
n = sprite_get_number(sprite);
p = sprite_get_precise(sprite);
s = sprite_get_smooth(sprite);
l = sprite_get_preload(sprite);
xo = sprite_get_xoffset(sprite);
yo = sprite_get_yoffset(sprite);
dx = (xo*xscale + w) mod w;
dy = (yo*yscale + h) mod h;
if (offscale) {
xo=dx;
yo=dy;
}
surf = surface_create(w,h);
if (surf < 0) return -1;
surface_set_target(surf);
for (i=0; i<n; i+=1) {
draw_clear_alpha(c_white,1);
draw_set_blend_mode_ext(bm_zero,bm_src_color);
draw_sprite_ext(sprite,i,dx,dy,xscale,yscale,0,c_white,1);
if (i == 0) {
newsprite = sprite_create_from_surface(surf,0,0,w,h,p,false,s,l,xo,yo);
if (newsprite < 0) {
surface_free(surf);
return -1;
}
}else{
sprite_add_from_surface(newsprite,surf,0,0,w,h);
}
draw_set_blend_mode(bm_normal);
}
surface_reset_target();
sprite_assign(sprite,newsprite);
sprite_delete(newsprite);
surface_free(surf);
return true;
}
It does what it says: it resizes a sprite
Offline
Pages: 1