【问题标题】:Roku animation using animated sprites, how to create the tedious xml使用动画精灵的 Roku 动画,如何创建繁琐的 xml
【发布时间】:2015-09-01 22:28:17
【问题描述】:

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

我了解了动画精灵here

代码可以在here找到。

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;
 }

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

编码愉快:)

【问题讨论】:

    标签: xml animation sprite-sheet roku brightscript


    【解决方案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
    

    【讨论】:

    • 很好,我没想到!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2015-03-26
    • 2011-08-30
    • 2012-08-16
    • 2011-12-01
    • 1970-01-01
    相关资源
    最近更新 更多