0

我制作了一个简单的java脚本代码来为roku中用brightscript编写的精灵动画创建精灵表xml。有没有更简单的方法来传递表格并让它计算出框架的尺寸?那会很酷。

我在这里了解了动画精灵。

代码可以在这里找到。

JS

var generate = function () {
frame_w = parseInt($("#f_w").val());
frame_h = parseInt($("#f_h").val());
sheet_w = parseInt($("#s_w").val());
sheet_h = parseInt($("#s_h").val());

xml = '<BitmapSet>\r\n<Bitmap name="set" filespec="<PLACE YOUR SHEET PATH>">\r\n';
region = 0;
for (y = 0; y < sheet_h; y+=frame_h) {
    for (x = 0; x < sheet_w; x+=frame_w) {
        xml += '<Region name="r'+region+'"  x="'+x+'"   y="'+y+'" w="'+frame_w+'" h="'+frame_h+'"/>\r\n';
        region++;
    }
}
xml += '</Bitmap>\r\n<Animation name="animatedSprite">\r\n';
for (i = 0 ; i < region; i ++) {
    xml += '<frame use="set.r'+i+'"/>\r\n';
}
xml += '</Animation>\r\n';
xml += '<ExtraInfo width="'+frame_w+'" height="'+frame_h+'" />\r\n'
xml += "</BitmapSet>";
$("#xml").html(formatXml(xml));
};

 function formatXml(xml) {
 var formatted = '';
var reg = /(>)(<)(\/*)/g;
xml = xml.replace(reg, '$1\r\n$2$3');
var pad = 0;
jQuery.each(xml.split('\r\n'), function(index, node) {
    var indent = 0;
    if (node.match( /.+<\/\w[^>]*>$/ )) {
        indent = 0;
    } else if (node.match( /^<\/\w/ )) {
        if (pad != 0) {
            pad -= 1;
        }
    } else if (node.match( /^<\w[^>]*[^\/]>.*$/ )) {
        indent = 1;
    } else {
        indent = 0;
    }

    var padding = '';
    for (var i = 0; i < pad; i++) {
        padding += '  ';
    }

    formatted += padding + node + '\r\n';
    pad += indent;
});

return formatted;
 }

如果这对你有帮助,那么亲爱的,我想我会分享的。

快乐编码:)

4

1 回答 1

1

实际上,您不必为精灵动画使用 XML 文件。请注意,必须设置框架的尺寸。

按照下面的示例加载 128x128 尺寸和 12 帧的精灵:

compositor = CreateObject("roCompositor")
compositor.SetDrawTo(screen, &h80)
compositor.NewAnimatedSprite(576, 296, GetLoadingSpriteRegions())

Function GetLoadingSpriteRegions() as Object
    arr = []
    bitmap=createobject("robitmap","pkg:/images/loader_sprite.png")

    for i=0 to 1408 step 128        
        region=createobject("roRegion",bitmap,i,0,128,128)    'frame is created here
        arr.Push(region)
    next

    return arr
End Function
于 2015-06-18T16:53:08.977 回答