Skip to content

Instantly share code, notes, and snippets.

@jaburns
Created November 26, 2014 19:18
Show Gist options
  • Save jaburns/54504d408eb43b36884c to your computer and use it in GitHub Desktop.
Save jaburns/54504d408eb43b36884c to your computer and use it in GitHub Desktop.
JSON Spritesheet Import JSFL
/**
* Json Frame Array Sprite Sheet Importer
*
* Creates a new MovieClip in the library, then for each frame in the imported spritesheet
* animation this script will create a bitmap-filled shape on the timeline of the newly-created
* movieclip.
*/
var LIBRARY_FOLDER = 'imported-sprites';
var dom = fl.getDocumentDOM ();
function importPNG (uri)
{
if (dom.importFile (uri, false))
{
dom.deleteSelection ();
var name = uri.substr (uri.lastIndexOf ('/') + 1);
dom.library.selectItem (name);
var item = dom.library.getSelectedItems()[0];
item.compressionType = 'lossless';
item.allowSmoothing = true;
item.name = name;
return name;
}
return null;
}
function createMovieClipFromFrames (imageName, clipName, frames)
{
dom.library.addNewItem ('movie clip', clipName, 'center');
dom.library.editItem (clipName);
for (var i = 0; i < frames.length; ++i) {
if (i > 0) {
dom.getTimeline().insertBlankKeyframe (i);
}
dom.getTimeline().currentFrame = i;
var ox = frames[i].spriteSourceSize.x - frames[0].sourceSize.w / 2;
var oy = frames[i].spriteSourceSize.y - frames[0].sourceSize.h / 2;
var fx = frames[i].frame.x;
var fy = frames[i].frame.y;
var w = frames[i].frame.w;
var h = frames[i].frame.h;
var fill = dom.getCustomFill();
fill.style = 'bitmap';
fill.bitmapPath = LIBRARY_FOLDER+'/'+imageName
fill.bitmapIsClipped = false;
fill.matrix = {
tx: -fx + ox,
ty: -fy + oy,
a: 20, // Default scale of bitmap fill from JSFL is (1/20), reset scale to 1
d: 20,
b: 0,
c: 0
};
dom.setCustomFill(fill);
dom.addNewPrimitiveRectangle ({
left: ox,
top: oy,
right: ox + w,
bottom: oy + h,
},
0, false, true
);
}
dom.library.moveToFolder (LIBRARY_FOLDER, clipName);
dom.exitEditMode ();
}
function go ()
{
var sheetURL = fl.browseForFileURL ('open', 'Select a spritesheet', 'json', 'json');
if (! sheetURL) return;
eval ('var jsonData = ' + FLfile.read (sheetURL));
var imageURL = sheetURL.substr(0,sheetURL.lastIndexOf('/')+1) + jsonData.meta.image;
dom.library.newFolder (LIBRARY_FOLDER);
var imageName = importPNG (imageURL);
dom.library.moveToFolder (LIBRARY_FOLDER, imageName);
var anims = {};
for (var k in jsonData.frames) {
var index = parseInt (k.substr(k.length-4), 10);
var title = k.substr (0,k.length-4);
if (typeof anims[title] === 'undefined') {
anims[title] = [];
}
anims[title][index] = jsonData.frames[k];
}
for (k in anims) {
createMovieClipFromFrames (imageName, k+'-sprite', anims[k]);
}
}
go ();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment