¿Cómo puedo ensamblar fácilmente una hoja de sprites?

Para un proyecto, tendré que diseñar varios mosaicos de 8x8 y ensamblarlos en un marco de 256*224.

Mi problema es que una vez que tengo todos los mosaicos de 8px x 8px, no sé cómo acceder a ellos/ensamblarlos fácilmente sin involucrar MUCHO archivo para abrir, copiar, pegar, cerrar, etc.

¿Hay una manera más conveniente de hacer esto? Idealmente, tendría un panel con todos mis mosaicos y solo tendría que moverlos en mi lienzo. Y aún más idealmente, funcionaría con Photoshop (pero también estoy abierto a usar otro software, si es necesario).

Respuestas (1)

Una búsqueda rápida muestra esta página: ( http://boxhacker.com/blog/?s=layertoanimation ) que brinda instrucciones sobre cómo hacerlo. Para traer información útil a esta página, resumiré:

) cargue sus mosaicos en un solo documento como capas usando photoshop "archivo>scripts>cargar archivos para apilar"

) use un script (javascript) para cambiar el tamaño del documento y luego itere a través de las capas, traduciendo la posición de los elementos de la capa

Esa página tiene una muestra de script, que he modificado. Lo probé en una hoja de sprites de 16 columnas x 10 filas. Es lento.

El código sigue (javascript. Guarde el código como un archivo de texto, cambie el nombre con la extensión de archivo js o jsx si es necesario, luego ejecútelo desde el elemento de menú "archivo> scripts en Photoshop). Las primeras 5 líneas son variables configurables donde especifica el tamaño del mosaico y nuevo tamaño del documento.

No puedo brindar asistencia técnica sobre esto, pero puede consultar el sitio de ayuda de Adobe para obtener información de referencia sobre secuencias de comandos.

var newDocWidth = 16*8;
var newDocHeight = 10*8;
var tileWidth = 8;
var tileHeight = 8;
var bottomLayerFirst = false;


var appPrefRulerUnits = app.preferences.rulerUnits;

var rows = newDocHeight / tileHeight;
var cols = newDocWidth / tileWidth;

if (documents.length > 0) 
{
    var docRef = activeDocument;    

    var numLayers = docRef.artLayers.length;    

    if ( numLayers === (rows*cols) )
    {
        var spriteX = docRef.width;
        var spriteY = docRef.height;    

        app.preferences.rulerUnits = Units.PIXELS;
        docRef.resizeCanvas( tileWidth * cols, tileHeight * rows, AnchorPosition.TOPLEFT );

        if ( bottomLayerFirst)
        {
            var currentLayer = numLayers-1;
            var layerIndexIncrement = -1
        }else
        {
            var currentLayer = 0;
            var layerIndexIncrement = 1
        }
        for (r=1;r <= rows ;r++) 
        {   
            for ( c=1; c<= cols;c++)
            {
                docRef.artLayers[currentLayer].visible = true;

                var movX = (c-1)*tileWidth;
                var movY = (r-1)*tileHeight;

            docRef.artLayers[currentLayer].translate(movX, movY);
            currentLayer = currentLayer + layerIndexIncrement;
            }

        }
    }else
    {
        alert("Number of layers ("+ numLayers +") does not match desired canvas size.\nEnsure tilesizes in script match and you have the proper number of layers in document (should be " + (cols * rows)+ ")");
    }
}else
{
    alert("Sorry must have more than 1 image open in photoshop to work");
}

app.preferences.rulerUnits =  appPrefRulerUnits;
Wow, ni siquiera sabía que podías usar javascript en Photoshop, todo un nuevo mundo de posibilidades. Gracias, eso es exactamente lo que necesitaba
tenga en cuenta que cerrar la paleta de capas y reducir los niveles de historial antes de ejecutar el script puede mejorar la velocidad.
eso es brillante