Экспорт уровней из FlashIDE для использование в игровом движке Phaser

Привет камрады,
решил поделиться небольшим примером JSFL скрипта который я написал для парсинга уровней из Flash IDE в JS массив для использования его в игровом движке Phaser.

Для начала рассмотрим fla файл уровня. Все очень просто, мы видим два слоя: back – для фона, а на слое levels размещаются объекты для парсинга, обратите внимание что слой для парсинга должен быть верхним по иерархии.



Теперь сам скрипт:
/**
* www.toybrainstudio.com
*/
 
var getTotal = function (name) {
 
    var t = 0;
    
    for (var i = 0; i < totals.length; i++)
    {
        if (totals[i] === name)
        {
            t++;
        }
    }
    
    totals.push(name);
    
    if (t == 0)
    {
        return '';
    }
    else
    {
        return t.toString();
    }
    
}
 
var addBitmap = function (element, num) {
 
    var png = element.libraryItem.name;
    var name = png;
 
    var local = name + getTotal(name);
        
    var r = element.rotation;   
        
    element.rotation=0;
        
    var x = element.x;
    var y = element.y;
 
    var sx = element.scaleX;
    var sy = element.scaleY;
        
    element.rotation = r;
    
    if (round)
    {
        x = Math.round(x);
        y = Math.round(y);
    }
 
    //  Save to preload array
    if (preload.indexOf(png) == -1)
    {
        preload.push(png);
    }
    
    //  Save to the create array
 
    create = create.concat("['" + name + ".png', " + x + ", " + y + ", "+ r + "],");
 
    create = create.concat("\n");
 
 
    
}
 
fl.outputPanel.clear();
 
var totals = new Array();
var round = true;
var preload = new Array();
 
//the current frame on timeline
var levelNum = fl.getDocumentDOM().getTimeline().currentFrame+1; 
 
//create a variable level
var create = "var level" + levelNum +" = [\n";
var cframe = fl.getDocumentDOM().getTimeline().currentFrame;
var stage = fl.getDocumentDOM().getTimeline().layers[0].frames[cframe].elements;
 
for (var i = 0; i < stage.length; i++)
{
    if (stage[i].instanceType == "bitmap")
    {
        addBitmap(stage[i], i);
    }
}
 
create = create.concat("];");
 
var output = "";
 
output = output.concat(create);
 
fl.trace(output);


И для примера результат работы скрипта:
var level1 = [
['portal01.png', 43, 405, 0],
['wood04.png', 63, 547, -0.50006103515625],
['wood04.png', 253, 236, 89.99824523925781],
['wood02.png', -7, 362, 0],
['circle02.png', 155, 284, 0],
['stone04.png', -5, 245, -0.50006103515625],
['pot01.png', 2, 266, 0],
['enemy04.png', 150, 172, -0.50006103515625],
['hero.png', 365, 447, -0.250030517578125],
];


Исходники можно забрать здесь
  • +8

Комментарии (1)

0
Спасибо. Очень полезная штука!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.