如何将字符串数组转换为类来从我的库中调用movieclips? as3 cs5

时间:2012-01-10 09:21:29

标签: actionscript-3

我有一系列汤的成分。这些成分也是我图书馆中的动画片段,都与标识符相关联。我想动态地将动画片段添加到舞台上。

我尝试了getDefinitionByName但是我一直收到一个错误,即变量“appel”(在这种情况下为veg [0])未定义。 基本上,我只是大致了解我在这里所做的事情,所以如果有人能够向我解释或者将我链接到一个有用的教程,我将不胜感激。

package  {

import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.utils.getDefinitionByName;

public class groentesoep extends MovieClip {
    const xAr:Array = [13,163,13,26,133,192,169,301,47,313,286,291,163,16];
    const yAr:Array = [12,133,133,370,484,352,256,316,241,160,468,10,53,465];                          
    const veg:Array = ["appel","bloemkool","broccoli","brood","champignons","friet","kaas","melk","paprika","prei","tomaat","ui","vis","wortel"];

    var i:int;

    public function groentesoep() {
        // constructor code
        create_intro();
    }
    public function create_intro () {
        var bord:intro = new intro();
        bord.x = -30;
        bord.y = -6;
        bord.name = "intro";
        addChild(bord);

        var btn:begin = new begin();
        btn.x = 416;
        btn.y = 255;
        btn.name = "beginKnop";
        btn.addEventListener(MouseEvent.CLICK, create_spel);
        addChild(btn);
    }
    public function create_spel(event:MouseEvent) {
        removeChild(getChildByName("intro"));
        getChildByName("beginKnop").removeEventListener(MouseEvent.CLICK, create_spel);
        removeChild(getChildByName("beginKnop"));

        var bord:spel = new spel();
        bord.x = -30;
        bord.y = -6;
        bord.name = "spel";
        addChild(bord);         

        var c:Class = getDefinitionByName(veg[0]) as Class;
        var instance:Object = new c();
        var mc:MovieClip = MovieClip(instance);
        addChild(mc);
    }
}}  

Screenshot of library

3 个答案:

答案 0 :(得分:2)

使用getDefinitionByName时,您始终必须在代码中显式使用这些类。 这意味着如果你使用的是在veg [0] - “appel”中定义名称的类 - 你必须“强制”编译器包含该类。 刚刚在代码的开头写道:

 var dummyAppel:appel;

...并为要通过名称检索的所有类执行此操作。 希望它有所帮助

答案 1 :(得分:0)

getDefinitionByName与库结合使用时,必须确保剪辑已链接。检查库中的链接列,这是将用作类名的别名。

答案 2 :(得分:0)

您可以采用稍微不同的方法,您可以在此示例中看到:

以下是库中两个movieclip符号的图像:

enter image description here

我将他们的类名存储在文档类的Vector.<String>常量中。

Main.as(文档类):

package  
{

    import flash.display.MovieClip;
    import flash.utils.Dictionary;
    import flash.utils.getDefinitionByName;

    public class Main extends MovieClip 
    {
        private const SHAPES:Vector.<String> = 
            Vector.<String>(['Circle', 'Square']);

        private var classes:Dictionary;

        public function Main() 
        {
            setClasses();

            addChild(new classes['Square']());

        }// end function

        private function setClasses():void
        {
            var classes:Dictionary = new Dictionary();

            for each(var shape:String in SHAPES)
            {
                classes[shape] = getDefinitionByName(shape);

            }// end for each

        }// end function

    }// end class

}// end package