如何在createjs中获取动态创建的动画片段大小?

时间:2015-07-18 04:25:22

标签: flash canvas createjs

我在flash画布动画项目(cc2015)中创建了一个动态的动画片段, 但无法获得大小,它只返回null。即使我在发布设置中启用了MultiframeBounds,它仍然一无所获。

PS:如果幻灯片中有文本字段,我可以获得文本字段的边界,但不是整个尺寸。

以下代码:

var root = this;
root.name = "Root";

(function(){

    var maxMcNum = 4;
    var wrapper = new createjs.MovieClip();

    for(var i=1; i<=maxMcNum; i++){
        eval("var slide"+ i +"=new lib.mc"+ i +"()");
        eval("wrapper.addChild(slide"+ i +")");
        eval("slide"+ i +".y = "+ (i-1) +"*slide"+ i +".nominalBounds.height");
    }

    root.addChild(wrapper);

    stage.on("click", function(){
        //alert(wrapper.frameBounds[wrapper.currentFrame]);
        alert(wrapper.getBounds());
    });

})();

2 个答案:

答案 0 :(得分:1)

这是Flash导出单帧MovieClip符号的问题。它尝试通过继承var t = window.location.pathname.split("/") t.pop(); t.pop(); t.pop(); 而不是Container来优化输出。因此,它不会为符号输出MovieClip,因此实例会在尝试计算运行时的边界时返回。正如Lanny所提到的,运行时边界不包含矢量图形,因此除非添加其他内容(如文本框),否则您将获得“null”。

我已向Adobe报告此问题,但您现在可以通过将代码放在单帧MC的第一帧(即幻灯片)上来解决此问题。例如,只需将frameBounds放在第一帧动作中,就会强制Flash将符号导出为MovieClip,并包含null;

你的frameBounds(我不完全确定你为什么在这里使用MC而不是容器),将使用运行时限,但这应该可以正常工作,因为它将查询子元素并返回它们返回的聚合转换边界。

答案 1 :(得分:0)

为什么您的代码已经过评估?

标称边界是由Flash CC导出计算和注入的特殊属性。默认情况下,没有任何标称边界,EaselJS没有内置的计算方法。你可以获得Bitmap,Text和Sprites的边界(以及包含它们的容器),但是无法计算Graphics。

getBounds方法不会查找nominalBounds,但如果您在发布设置中切换“多帧边界”,则getBounds将获得由Flash CC分配的frameBounds在出口期间。