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

Actionscript 3 如何将字符串数组转换为类以从我的库调用movieclips?as3 cs5,actionscript-3,Actionscript 3,我有一系列的汤料。这些成分也是我的库中的movieclips,都与标识符链接。我想动态地把电影唇添加到舞台上 我尝试了getDefinitionByName,但我一直得到一个错误,变量“appel”(本例中为veg[0])未定义。 基本上,我只知道我在这里做什么,所以如果有人能给我解释一下或者给我一个有用的教程,我将不胜感激 package { import flash.display.MovieClip; import flash.display.SimpleButton; import

我有一系列的汤料。这些成分也是我的库中的movieclips,都与标识符链接。我想动态地把电影唇添加到舞台上

我尝试了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);
    }
}}  

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

在本例中,您可以看到一种稍微不同的方法:

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

我将它们的类名存储在
向量中。
常量在文档类中

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
包
{
导入flash.display.MovieClip;
导入flash.utils.Dictionary;
导入flash.utils.getDefinitionByName;
公共类Main扩展了MovieClip
{
私有常量形状:向量
向量。(['圆','方');
私有var类:字典;
公共功能Main()
{
setClasses();
addChild(新类['Square']());
}//端函数
私有函数setClasses():void
{
变量类:Dictionary=newdictionary();
对于每个(变量形状:形状中的字符串)
{
类[shape]=getDefinitionByName(shape);
}//每个都结束
}//端函数
}//末级
}//端包

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

 var dummyAppel:appel;
…并对所有要按名称检索的类执行此操作。
希望有帮助

它们是链接的,名称对应于数组veg[]中的字符串。所以现在这不是问题。@Kodiak我也觉得这是问题所在。@silvith也许如果你用屏幕打印你的库(如我的回答),我们可能会看到一些你看不到的东西。我添加了一个链接到库的屏幕截图-我的限制还不允许我在这里发布图像:)谢谢你们两位,顺便说一句:)你能在错误发生之前跟踪c和实例吗?我按照你说的跟踪了它们。但是错误似乎将此位getDefinitionByName(veg[0])引用为类,因此无法跟踪实例。我认为这个错误意味着他没有将veg[0](字符串“appel”)识别为一个类。你是说“var c:class=…”后面的“trace(c)”显示“null”?不,我的意思是他甚至没有做到这一点。错误是:ReferenceError:error#1065:Variabele-appel未定义。那么“appel”在库中确实不可用。我无法加载你上传的图片,请确保你的链接名没有输入错误。这个选项对我来说有点太复杂了。谢谢你的意见:)@silvith嗯,解释起来并不复杂(我应该这么做)<代码>专用常量形状:向量向量。(['圆','方')基本上与
私有常量形状相同:数组=['Circle','Square']。你用哪一种没有多大区别。至于
字典
对象
类,它基本上类似于数组,但不使用整数作为索引,而是使用与所需值关联的键,因此
类['Square']
相当于
平方
,我们可以像这样启动新类['Square']()@silvith那帮你清理了吗?我想这没关系,因为你有一个公认的答案,但我个人更喜欢这种方法。谢谢你的解释。我想我理解你的意思,但我必须做一些实验来适应这种方法:)不客气。我也因此浪费了很多时间,这一点都不简单:(我认为发生这种情况是因为编译器跳过了所有未使用的类,而这是让它知道库中的类的唯一方法,您将使用nice。为了简化一切,您甚至可以在数组中放入类而不是类名:)