从MovieClip读取属性的最佳方法?

时间:2015-10-19 15:30:57

标签: actionscript-3 flash

我有一个.fla文件,里面有一些放置在场景中的movieclip实例。我需要遍历它们并收集一些数据,如位置,名称和自定义属性。

这些自定义属性,我不知道如何传递它们,我知道到目前为止一种方法是使用辅助功能属性面板(Flash Pro CC),然后在代码中我可以读取它们。但是我应该有一个更好的方法。

2 个答案:

答案 0 :(得分:1)

如果我已经正确理解了你的问题以及你在@Aaron答案的评论中所说的内容,那么你有一个动态加载的swf文件,你想获得/设置它的一些MovieClip属性,如果就是这样,举个例子:

MyMC.as:

public class MyMC extends MovieClip 
{       
    private var timer:Timer;
    private var rotation_speed:int = 1;

    public function MyMC() {
    }
    public function set_Rotation_Speed(_rotation_speed:int): void {
        this.rotation_speed = _rotation_speed;
    }
    public function get_Rotation_Speed(): int {
        return this.rotation_speed;
    }
    public function start_Rotation(): void {            
        this.timer = new Timer(500, 10);
        this.timer.addEventListener(TimerEvent.TIMER, on_Timer);
        this.timer.start();
    }
    private function on_Timer(e:TimerEvent): void {
        this.rotation += this.rotation_speed;
    }
}

然后,在我的swf.swf中,我有一个MovieClip的实例。

我使用以下代码加载swf.swf

var loader:Loader = new Loader()
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, on_SWFLoad);
    loader.load(new URLRequest('swf.swf'));

为了设置/获取我的一些MovieClip属性,我做了:

function on_SWFLoad(e:Event): void 
{       
    var swf:DisplayObjectContainer = DisplayObjectContainer(loader.content);
    var num_children:int = swf.numChildren;

    for(var i:int = 0; i < num_children; i++)
    {           
        var child:MovieClip = MovieClip(swf.getChildAt(i));

        // get the name
        trace('name : ' + child.name);

        // set the position
        child.x = child.y = 100;

        // get the class name, in my case it's MyMC
        var class_name:String = getQualifiedClassName(child);

        // get all the details of the child
        trace(describeType(child));

        child.set_Rotation_Speed(45);
        child.start_Rotation();

        trace(child.get_Rotation_Speed());      // gives : 45           
    }

    addChild(loader);
}

您可以使用describeType()功能获取实例的所有属性。

希望可以提供帮助。

答案 1 :(得分:0)

首先,您可以从代码中设置时间轴实例的属性。这没什么特别的。例如:

  1. 在关键帧上放置库符号的实例
  2. 在“属性”面板中为其指定实例名称,例如&#34; myInstance&#34;
  3. 在同一个关键帧上放置一些引用它的代码,例如myInstance.color = "red"
  4. 您还可以通过将符号设为组件来创建和分配自定义属性:

    1. 右键单击库中的符号,然后选择&#34;组件定义&#34;
    2. 在“参数”表中添加自定义属性。它现在是一个组件符号。
    3. 在时间轴上,放置符号实例,然后使用“属性”面板设置其参数。
    4. 如果需要,您可以使用组件执行更多操作,例如实时预览和编译组件。更多信息可以在这里找到:http://www.adobe.com/devnet/flash/learning_guide/components/part03.html