Mayo 21, 2011, 06:57:37 PM Ultima modificación: Mayo 22, 2011, 12:03:08 AM por Topet
Nombre del creador: Kirs (yo)

Versi?n de GM utilizada:  :GM8: Pro


Informaci?n y utilidad: Bien explicada justo aqui abajo:

[gml]
/*************** TILESET JOINING SCRIPT  *********************/
//                                                           //
//  Este script sirve para crear un tileset sin separaci?n   //
//  entre sus tiles a partir de su correspondiente im?gen    //
//  con los tiles separados.                                 //
//                                                           //
//                                             Por 'Kirs'    //
/*************************************************************/


//Argumentos: Imagen original, Offset en X, Offset en Y, separacion en X, separaci?n en Y, tama?o de tile



//Inicializar variables:

   var back,width,height,xoff,yoff,xsep,ysep,tsize,sizeX,sizeY,numTX,numTY,bx,by,sx,sy,res;

   back = argument0;
   xoff = argument1;
   yoff = argument2;
   xsep = argument3;
   ysep = argument4;
   tsize = argument5;

   bx = xoff;
   by = yoff;
   sx = 0;
   sy = 0;

   sizeX = background_get_width(back)
   sizeY = background_get_height(back)
   numTX = sizeX div tsize
   numTX-= numTX div tsize
   numTY = sizeY div tsize
   numTY-= numTY div tsize

   width =  (numTX)* tsize;
   height = (numTY)* tsize;

//Creamos la superf?cie y la asignamos como canvas    
   
   res=surface_create(width,sizeY);
   surface_set_target(res);

//Primero vamos a unir la imagen horizontalmente  
//Para esto cogemos rect?ngulos de 'anchura = tama?o del tile' y 'altura =  altura de la imagen'
//y origen bx,by, y lo dibujamos sobre la superficie en la posicion sx,sy.

//Luego asignamos a by un nuevo valor teniendo en cuenta el tama?o del tile y la separaci?n vertical 'ysep',
//y para que vaya quedando unido, sumamos el tama?o del tile a la coordenada vertical de dibujo en la superf?cie 'by'

   repeat numTX{
   draw_background_part(back,bx,by,tsize,sizeY,sx,sy)
   sx+=tsize;
   bx+=tsize+xsep;
   }

   surface_reset_target()
   
   
//Ahora vamos a coger la superficie creada como nueva imagen para ajuntar, esta vez verticalmente, y creamos una nueva
//superf?cie con el tama?o correcto
 
   back=background_create_from_surface(res,0,0,width,sizeY,0,0)
   surface_free(res)
   res=surface_create(width,height);
   
//Al crear la nueva imagen desde la superf?cie anterior, el offset en 'x' y en 'y' son nulos, asi es necesario hacer
//algunos reajustes de variables  
   sx = 0;
   bx=0;
   by=0;
//Y lo mismo de antes, solo que con rect?ngulos 'altos', lo hacemos con rect?ngulos 'anchos'
   surface_set_target(res);
 
   repeat (numTY){
   draw_background_part(back,bx,by,width,tsize,sx,sy)
   sy+=tsize;
   by+=tsize+ysep;
   }
   
//Reiniciamos el canvas a la salida del monitor, gurdamos la superf?cie en un .png y listo

surface_reset_target()
surface_save(res,"newTileset.png");

// TADA!!
[/gml]

Ejemplo:
Entrada:

Salida: