Created
November 26, 2014 19:18
-
-
Save jaburns/54504d408eb43b36884c to your computer and use it in GitHub Desktop.
JSON Spritesheet Import JSFL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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