Skip to content

Instantly share code, notes, and snippets.

@06wj
Created February 22, 2013 08:36
Show Gist options
  • Save 06wj/5011791 to your computer and use it in GitHub Desktop.
Save 06wj/5011791 to your computer and use it in GitHub Desktop.
jsfl commands
# coding:utf-8
import os, sys
import codecs
import json
import math
names = json.loads(codecs.open("names.json", "r", "utf-8").read())
baseURL = sys.path[0].replace("\\battleCode\\tools","\\");
dataURL = baseURL + "battleCode\\tools\data\\";
personURL = baseURL + "release\person\\";
def lzma(f, t):
command = "lzma\lzma e " + f + " " + t
print(os.system(command))
def encodeJson(data):
return json.dumps(data, ensure_ascii = False, separators = (',',':'))
def getFileData():
file = codecs.open(readURL + "data.json", "r", "utf-8")
data = json.loads(file.read())
file.close()
file = codecs.open(readURL + "image.json", "r", "utf-8")
image = json.loads(file.read())
file.close()
for layer in data["layers"]:
layer["image"] = image[layer["image"]]
return data
def buildLayerData(layerData):
for frameData in layerData["frames"]:
if frameData == -1:
continue
del frameData[6:8]
for j in range(0, 4):
frameData[j] = round(frameData[j], 4)
for j in range(4, 6):
frameData[j] = round(frameData[j], 2)
def writeData():
data = getFileData()
for layer in data["layers"]:
buildLayerData(layer)
file = codecs.open(outputURL + "data.json", "w", "utf-8")
file.write(encodeJson(data))
file.close()
lzma(outputURL + "data.json", outputURL + "data.png")
for name in names:
outputURL = personURL + name + "\\"
readURL = dataURL + name + "\\"
writeData()
os.system("pause")
fl.showIdleMessage(false);
var baseURI = fl.baseURI = fl.scriptURI.slice(0, fl.scriptURI.lastIndexOf("/")) + "/";
fl.runScript(baseURI + "config.jsfl");
log(baseURI, "start");
var name = "zhangfei";
dataURI += name + "/";
personURI += name + "/";
run();
function run(){
var data = {layers:getLayersData(), actions:getActionData()}
fl.write(dataURI + "data.json", JSON.stringify(data));
createImageData();
}
function createImageData(){
var myExport = createExporter();
var names = [];
layers.forEach(function(layer){
if(layer.frames.length == 0 || layer.frames[0].elements.length == 0) return;
myExport.addSymbol(layer.frames[0].elements[0].libraryItem);
names.push(layer.frames[0].elements[0].libraryItem.name);
});
var text = myExport.exportSpriteSheet(baseURI + "temp", "png", true);
FLfile.remove(baseURI + "temp.json");
FLfile.remove(baseURI + "temp.png");
var imageData = fl.parse(text);
var data = {};
for(var name in imageData.frames){
data[name.slice(0, name.length-4)] = imageData.frames[name].frame;
}
if(lib.itemExists("jsv5")) lib.deleteItem("jsv5");
if(lib.itemExists("jsv5img")) lib.deleteItem("jsv5img");
lib.addNewItem('movie clip', "jsv5");
fl.editItem("jsv5");
names.forEach(function(name){
lib.addItemToDocument({x:0, y:Math.random()}, name);
});
layers[0].frames[0].elements.forEach(function(elem){
if(!elem || !fl.getLibraryName(elem)) return;
elem.x = imageData.frames[fl.getLibraryName(elem)+"0000"].frame.x - elem.left + elem.x;
elem.y = imageData.frames[fl.getLibraryName(elem)+"0000"].frame.y - elem.top + elem.y;
});
fl.getItem("jsv5").exportToLibrary(1, "jsv5img");
fl.getItem("jsv5img").exportToFile(personURI + "sprite.png");
fl.write(dataURI + "image.json", JSON.stringify(data));
}
function createExporter(){
var myExport = fl.spriteSheetExporter;
myExport.beginExport();
myExport.algorithm = "maxRects";
myExport.format = "RGBA8888";
myExport.layoutFormat = "JSON";
return myExport;
}
function getLayersData(){
var result = [];
layers.forEach(function(layer){
if(layer.name != "code")
{
result.push(getLayerData(layer));
}
});
return result;
}
function getLayerData(layer){
var frames = layer.frames;
if(frames.length == 0)
{
return null;
}
var result = {
frames:[],
image:fl.getLibraryName(frames[0].elements[0]),
name:layer.name
};
for(var i = 0;i < frames.length;)
{
if(frames[i].elements.length == 0)
{
log("getLayerData::" + layer.name + "---- frame:" + i + "----------------------------木有数据");
result.frames.push(-1);
i++;
continue;
}
var f = frames[i];
var elem = f.elements[0];
var fd = f.duration;
var data;
var m = elem.matrix;
var tx = elem.getTransformationPoint().x;
var ty = elem.getTransformationPoint().y;
if(fd == 1){
data = [m.a,m.b,m.c,m.d,m.tx,m.ty,tx,ty];
}
else if(f.tweenType == "none"){
data = [m.a,m.b,m.c,m.d,m.tx,m.ty,tx,ty,fd];
}
else if(f.tweenType == "motion"){
data = [m.a,m.b,m.c,m.d,m.tx,m.ty,tx,ty,fd,1]
}
result.frames.push(data);
i += fd;
}
return result;
}
function getActionData()
{
var codeLayer = fl.getLayerByName("code");
var result = {};
var names = [];
var frames = [];
codeLayer.frames.forEach(function(frame, i){
if(frame.name) {
if(result[frame.name] === undefined){
result[frame.name] = i + 1;
names.push(frame.name);
frames.push(i + 1);
}
}
});
for(var i = 0;i < names.length-1;i ++)
{
result[names[i]] = frames[i] + "-" + (frames[i + 1] - 1);
}
result[names[i]] = frames[i] + "-" + codeLayer.frames.length;
return result;
}
log("end\n");
function log(){
[].forEach.call(arguments, function(elem){
fl.trace(elem)}
);
}
function clear(){
fl.outputPanel.clear();
}
var doc,timeline,layers,lib;
fl.init = function(){
doc = fl.doc = fl.getDocumentDOM();
timeline = fl.timeline = doc.getTimeline();
layers = fl.layers = timeline.layers;
frames = fl.frames = layers[0].frames;
elems = fl.elems = frames[0].elements;
elem = fl.elem = elems[0];
lib = fl.lib = fl.doc.library;
}
fl.init();
var JSON = {
stringify:function(obj){
switch(typeof(obj)){
case 'string':
return '"' + obj.replace(/(["\\])/g, '\\$1') + '"';
case 'array':
return '[' + obj.map(this.stringify).join(',') + ']';
case 'object':
if(obj instanceof Array){
var strArr = [];
var len = obj.length;
for(var i=0; i<len; i++){
strArr.push(this.stringify(obj[i]));
}
return '[' + strArr.join(',') + ']';
}else if(obj==null){
return 'null';
}else{
var string = [];
for (var p in obj) string.push('"' + p + '"' + ':' + this.stringify(obj[p]));
return '{' + string.join(',') + '}';
}
case 'number':
return obj;
case false:
return obj;
}
},
parse : function(str){
eval("var obj = " + str);
return obj;
}
};
fl.stringify = function(obj){
return JSON.stringify(obj);
};
fl.parse = function(str){
return JSON.parse(str);
};
fl.setElement = function(elem){
elem = elem instanceof Layer ? elem.frames[0].elements[0]:elem;
doc.selectNone();
doc.selection = [elem];
};
fl.getElementProperty = function(elem, prop){
fl.setElement(elem);
return fl.doc.getElementProperty(prop);
};
fl.getLayerByName = function(name){
return fl.layers.filter(function(elem){return elem.name.indexOf(name)!=-1})[0];
};
fl.rgbToColor = function(r, g, b){
var str = (r<<16|g<<8|b).toString(16);
while(str.length < 6){
str = "0" + str;
}
return "#" + str;
};
fl.isSame = function(a, b, props){
return props.every(function(n){return a[n]===b[n]})
};
fl.editItem = function(name){
var success = lib.editItem(name);
fl.init();
fl.initTimeline();
log("edit " + name + " " + success);
return success;
};
fl.getItem = function(name){
lib.selectItem(name);
return lib.getSelectedItems()[0]
};
fl.getLibraryName = function(elem){
if(elem instanceof SymbolInstance){
return elem.libraryItem.name.split("/").pop();
}
else {
log("getLibraryName::" + typeof(elem));
return false;
}
};
fl.exportImage = function(elem, uri)
{
if(lib.itemExists("jsv5img")) lib.deleteItem("jsv5img");
fl.getItem(elem.libraryItem.name).exportToLibrary(1, "jsv5img");
fl.getItem("jsv5img").exportToFile(uri);
};
//fl.getBounds = function(obj){
//var x = obj.x, y = obj.y, w = obj.width, h = obj.height, angle = obj.rotation;
//
// var sin = Math.sin(angle/180*Math.PI);
// var cos = Math.cos(angle/180*Math.PI);
//
// var points = [];
// points.push(fl.rotate(w, 0, sin, cos));
// points.push(fl.rotate(w, h, sin, cos));
// points.push(fl.rotate(0, h, sin, cos));
// log(fl.rotate(0,h,sin, cos).x + x);
//
// var minx = 0,miny = 0,maxx = 0,maxy = 0;
//
// points.forEach(function(p){
// maxx = p.x>maxx?p.x:maxx;
// minx = p.x<minx?p.x:minx;
// maxy = p.y>maxy?p.y:maxy;
// miny = p.y<miny?p.y:miny;
// });
//
// return {minx:minx + x, maxx:maxx + x, miny:miny + y,maxy:maxy + y}
//}
fl.rotate = function(x, y, ang){
var cos, sin;
var a = arguments;
if(a.length == 3)
{
a[2] = a[2]*Math.PI/180;
sin = Math.sin(a[2]);
cos = Math.cos(a[2]);
}
else
{
sin = a[2];
cos = a[3];
}
var rx = x * cos - y * sin;
var ry = x * sin + y * cos;
return {x:rx, y:ry};
}
fl.getFrameBounds = function(n){
timeline.setSelectedFrames(n, n);
doc.selectAll();
return document.getSelectionRect();
}
fl.getAllBounds = function(num){
var rect = fl.getFrameBounds(0);
for(var i = 1;i < num;i ++){
var tmp = fl.getFrameBounds(i);
rect.left = rect.left < tmp.left?rect.left:tmp.left;
rect.right = rect.right > tmp.right?rect.right:tmp.right;
rect.top = rect.top < tmp.top?rect.top:tmp.top;
rect.bottom = rect.bottom>tmp.bottom?rect.bottom:tmp.bottom;
}
return rect;
};
fl.renameAllLayers =function(){
layers.forEach(function(layer, i){
if(fl.getLibraryName(layer.frames[0].elements[0]) && fl.getLibraryName(layer.frames[0].elements[0]) != layer.name)
{
layer.name = fl.getLibraryName(layer.frames[0].elements[0]);
}
})
}
fl.initTimeline = function(){
layers.forEach(function(layer, i){
timeline.setSelectedLayers(i, false);
timeline.setLayerProperty('locked', false);
// timeline.convertToKeyframes();
});
};
fl.write = function(uri, text){
var url = FLfile.uriToPlatformPath(uri);
if(FLfile.write(uri, text)) {
log(url + " 创建成功!");
return;
};
FLfile.createFolder(uri.slice(0, uri.lastIndexOf("/")));
if(FLfile.write(uri, text)) log(url + " 创建成功!");
else log(url + " 创建失败!");
};
fl.addLinkage = function(itemName, linkageName){
fl.getDocumentDOM().library.selectItem(itemName);
var lib = fl.getDocumentDOM().library;
if (lib.getItemProperty('linkageImportForRS') == true) {
lib.setItemProperty('linkageImportForRS', false);
}
lib.setItemProperty('linkageExportForAS', true);
lib.setItemProperty('linkageExportForRS', false);
lib.setItemProperty('linkageExportInFirstFrame', true);
lib.setItemProperty('linkageClassName', linkageName);
};
// var u = FLfile.platformPathToURI("F:/newSanguo/armyCode/army/media/fx/")
// fl.init();
// lib.items.forEach(function(i){
// if(i instanceof SymbolItem && i.name.indexOf("fx")>=0){
// lib.selectItem(i.name);
// // if (lib.getItemProperty('linkageImportForRS') == true) {
// // lib.setItemProperty('linkageImportForRS', false);
// // }
// // else {
// // lib.setItemProperty('linkageExportForAS', false);
// // lib.setItemProperty('linkageExportForRS', false);
// // }
// i.exportSWF(u+i.name+".swf")
// }
// })
// doc.clipCopy()
// // fl.createDocument()
// var elements = layers[1].frames[0].elements;
// log(elements)
// elements.forEach(function(e){
// fl.editItem(e.name);
// })
// lib.items.forEach(function(t){
// if(t.symbolType == "button"){
// log(t)
// lib.setItemProperty('symbolType', 'movie clip');
// }
// });
// lib.setItemProperty('symbolType', 'movie clip');
// var lib = fl.getDocumentDOM().library;
// lib.setItemProperty('symbolType', 'movie clip');
// if (lib.getItemProperty('linkageImportForRS') == true) {
// lib.setItemProperty('linkageImportForRS', false);
// }
// else {
// lib.setItemProperty('linkageExportForAS', false);
// lib.setItemProperty('linkageExportForRS', false);
// }
// lib.setItemProperty('sourceFilePath','file:///');
// lib.setItemProperty('sourceLibraryName','');
// lib.setItemProperty('sourceAutoUpdate',false);
// lib.setItemProperty('scalingGrid', false);
/**
* add new layer and write "this.stop();"
* @see http://bitmap.dyndns.org/blog/archives/001389.html
*/
// var items = fl.getDocumentDOM().library.getSelectedItems();
// for (var i = 0; i < items.length; i++) {
// fl.getDocumentDOM().library.editItem(items[i].name);
// var timeline = fl.getDocumentDOM().getTimeline();
// timeline.addNewLayer("script");
// timeline.layers[0].frames[0].actionScript = "this.stop();";
// }
// elems.forEach(function(e){
// e.name = fl.getLibraryName(e);
// });
// log(frames[2].setCustomEase("all",[ {x:0,y:0}, {x:.3,y:.3}, {x:.7,y:.7}, {x:1,y:1} ]))
// log(frames[2].getCustomEase("x"))
log("load");
clear();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment