Created
February 22, 2013 08:36
-
-
Save 06wj/5011791 to your computer and use it in GitHub Desktop.
jsfl commands
This file contains hidden or 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
# 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") |
This file contains hidden or 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
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"); | |
This file contains hidden or 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
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