Skip to content

Instantly share code, notes, and snippets.

@06wj
Last active December 16, 2015 13:38
Show Gist options
  • Save 06wj/5442605 to your computer and use it in GitHub Desktop.
Save 06wj/5442605 to your computer and use it in GitHub Desktop.
flash2canvas
fl.showIdleMessage(false);
var baseURI = fl.baseURI = fl.scriptURI.slice(0, fl.scriptURI.lastIndexOf("/")) + "/";
fl.runScript(baseURI + "utils.jsfl");
log(baseURI, "start");
var data = {};
data.shape = getShapeData();
data.mc = getMcData();
data.map = getMapData();
data.hit = getHitData();
function createPoint(obj)
{
return {x:obj.x, y:obj.y};
}
function getMapData()
{
return {
width:doc.width,
height:doc.height,
};
}
function getHitData()
{
if(!fl.getLayerByName("hit")) return null;
var data = {lines:[], beziers:[]};
var shape = fl.getLayerByName("hit").frames[0].elements[0];
var edges = shape.edges;
var indexHash = {};
edges.forEach(function(edge){
if(!indexHash[edge.cubicSegmentIndex]){
indexHash[edge.cubicSegmentIndex] = {isLine:edge.isLine}
}
});
var lines = data.lines;
var beziers = data.beziers;
for(var index in indexHash)
{
var isLine = indexHash[index].isLine;
var arr = shape.getCubicSegmentPoints(parseInt(index));
if(isLine)
{
lines.push([createPoint(arr[0]), createPoint(arr[3])]);
}
else
{
beziers.push([createPoint(arr[0]), createPoint(arr[1]),createPoint(arr[2]), createPoint(arr[3])])
}
}
return data;
}
function getShapeData()
{
if(!fl.getLayerByName("shape")) return null;
var getData = function(elem){
var edges = elem.edges;
var result = [];
var type;
if(elem.isRectangleObject)
{
type = "rect";
result = [{x:elem.left, y:elem.top, width:elem.width, height:elem.height}];
}
else if(elem.isOvalObject)
{
type = "oval";
}
else
{
type = "bezier";
var indexHash = {};
edges.forEach(function(edge){
if(!indexHash[edge.cubicSegmentIndex]){
indexHash[edge.cubicSegmentIndex] = {isLine:edge.isLine}
}
});
var lines = data.lines;
var beziers = data.beziers;
var drawData = [];
for(var index in indexHash)
{
var arr = elem.getCubicSegmentPoints(parseInt(index));
drawData.push([createPoint(arr[0]), createPoint(arr[1]),createPoint(arr[2]), createPoint(arr[3])]);
}
while(drawData.length > 0)
{
var subData = [];
subData.push(drawData.shift());
while (getNext(subData, drawData)) {
}
result.push(subData);
}
}
return {type:type, data:result};
}
var data = {};
for each(var elem in fl.getLayerByName("shape").frames[0].elements)
{
var tmp = getData(elem);
log(JSON.stringify(tmp))
data[tmp.type] = data[tmp.type]||[];
tmp.data = Object.prototype.toString.call([])=="[object Array]"?tmp.data:[tmp.data];
data[tmp.type] = data[tmp.type].concat(tmp.data);
}
return data;
}
function getNext(arr, drawData)
{
var last = arr[arr.length - 1];
for (var i = 0; i < drawData.length; i ++)
{
var tmp = drawData[i];
if (tmp[0].x == last[3].x && tmp[0].y == last[3].y)
{
drawData.splice(i, 1);
arr.push(tmp);
return tmp;
}
}
return null;
}
function getMcData()
{
if(!fl.getLayerByName("mc")) return null;
var data = {};
var elems = fl.getLayerByName("mc").frames[0].elements;
elems.forEach(function(elem){
var name = fl.getLibraryName(elem);
data[name] = data[name]||[];
data[name].push(createPoint(elem))
});
return data;
}
function getFloorData()
{
fl.editItem("floor");
var data = [];
for each(var layer in layers)
{
var points = [];
for(var i = 0;i < layer.frames.length;)
{
var f = layer.frames[i];
var elem = f.elements[0];
var fd = f.duration;
var data;
points.push({
x:elem.x,
y:elem.y
});
i += fd;
}
data.push({
name:fl.getLibraryName(elem),
data:points
});
}
logstr(data)
}
getFloorData();
var str = "var mapData = " + JSON.stringify(data);
FLfile.write(baseURI + "/mapData.js", str)
log("end\n");
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<style type="text/css">
canvas{
border:1px solid black;
}
</style>
</head>
<body>
<canvas></canvas>
<script src = "mapData.js"></script>
<script>
var d = JSON.parse(JSON.stringify(mapData));
var shapeData = mapData.shape;
var arr;
ctx = document.querySelector("canvas").getContext("2d");
document.querySelector("canvas").width = mapData.map.width;
document.querySelector("canvas").height = mapData.map.height;
for(var type in shapeData){
arr = shapeData[type];
ctx.save();
if(type == "bezier")
{
arr.forEach(function(data){
ctx.fillStyle = "#000000";
ctx.strokeStyle = "#9966ff";
ctx.beginPath();
var p = data.shift();
ctx.moveTo(p[0].x, p[0].y);
ctx.bezierCurveTo(p[1].x, p[1].y, p[2].x, p[2].y, p[3].x, p[3].y);
data.forEach(function(p){
ctx.bezierCurveTo(p[1].x, p[1].y, p[2].x, p[2].y, p[3].x, p[3].y);
});
ctx.fill();
});
}
else if(type == "rect")
{
arr.forEach(function(data){
ctx.fillStyle = "#000000";
ctx.fillRect(data.x, data.y, data.width, data.height);
});
}
ctx.restore();
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment