【问题标题】:How can I get the dynamic created movieclip size in createjs?如何在 createjs 中获取动态创建的影片剪辑大小?
【发布时间】:2015-10-07 21:07:05
【问题描述】:

我在 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());
    });

})();

【问题讨论】:

    标签: flash canvas createjs


    【解决方案1】:

    这是 Flash 如何导出单帧 MovieClip 符号的问题。它尝试通过子类化Container 而不是MovieClip 来优化输出。因此,它不会为符号输出frameBounds,因此实例会在运行时尝试计算它们的边界。正如 Lanny 所提到的,运行时边界不包括矢量图形,因此除非您添加其他内容(如文本框),否则您将获得“null”。

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

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

    【讨论】:

      【解决方案2】:

      为什么要评估您的代码?

      标称边界是由 Flash CC 导出计算和注入的特殊属性。默认情况下,没有任何东西有名义上的界限,并且 EaselJS 没有内置的方法来计算它。您可以获得位图、文本和精灵(以及包含它们的容器)的边界,但无法计算图形。

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

      【讨论】:

        猜你喜欢
        • 2015-06-28
        • 2017-08-23
        • 1970-01-01
        • 2014-08-28
        • 2012-05-25
        • 2011-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多