Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 从电影剪辑中读取属性的最佳方式?_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 从电影剪辑中读取属性的最佳方式?

Actionscript 3 从电影剪辑中读取属性的最佳方式?,actionscript-3,flash,Actionscript 3,Flash,我有一个.fla文件,里面有一些movieclip实例放在场景中。我需要遍历它们并收集一些数据,比如位置、名称和自定义属性 这些自定义属性,我不知道如何传递它们,我知道到目前为止一种有效的方法是使用可访问性属性面板(Flash Pro CC),然后在代码中我可以读取它们。不过,我认为应该有更好的方法。首先,您可以从代码中设置时间线实例的属性。这没什么特别的。例如: 将库符号的实例放置在关键帧上 在“属性”面板中为其指定一个实例名称,例如“myInstance” 在同一关键帧上放置一些引用它的代码

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


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

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

  • 将库符号的实例放置在关键帧上
  • 在“属性”面板中为其指定一个实例名称,例如“myInstance”
  • 在同一关键帧上放置一些引用它的代码,例如
    myInstance.color=“red”
  • 还可以通过使符号成为构件来创建和指定自定义特性:

  • 右键单击库中的符号并选择“组件定义”
  • 在参数表中添加自定义特性。它现在是一个组件符号
  • 在时间线上,放置符号的实例,并使用“属性”面板设置其参数

  • 如果需要,您可以对组件进行更多操作,例如实时预览和编译组件。更多信息可以在这里找到:

    如果我正确理解了您的问题以及您在关于@Aaron答案的评论中所说的话,您有一个swf文件,您可以动态加载该文件,并且您希望获取/设置它的一些MovieClips属性,如果是这样,请以下面的示例为例:

    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);
    }
    
    _SWFLoad上的函数(e:事件):无效 { var swf:DisplayObjectContainer=DisplayObjectContainer(loader.content); var num_children:int=swf.numChildren; for(变量i:int=0;i 您可以使用该函数获取实例的所有属性


    希望这能有所帮助。

    组件定义部分会很好,我只需要能够从代码中读取这些值。我不是用Flash来编写代码,只是为了创建一些动作。你可以使用实例名和属性名从代码中引用它们,例如:
    myInstance.color
    是的,这不起作用。我需要澄清的是,我是在我的IDE中读取属性,而不是在时间线中。我动态加载我的SWF,然后尝试读取其中的值。例如,我添加了一个默认值为“asd”的myVar,然后在我的代码中执行unit1.myVar,它返回未定义的。“在我的IDE中”意味着什么?在一个.as文件中?在任何情况下,它都应该工作,您可能有时间或范围问题。发布一些代码。所谓“在我的IDE中”,我的意思是我没有试图从时间轴访问组件值,它可能具有不同的范围/行为。我已经有一段时间没有在时间线内写代码了。(感谢上帝)。所以我创建并放置在舞台上的新符号(在Flash Pro CC中)将用作MyMC类而不是MovieClip,对吗?。在这种情况下,如何将MyMC指定为符号的类?。我试过这么做,但它的工作方式有点笨拙,它要求我保存一个新的.as文件,但它从未使用过它。@Artemix是的,没错,它是MovieClip的一个子类。如果您需要编辑该类,请执行该操作,否则,Flash将自动生成该类。