我有一系列汤的成分。这些成分也是我图书馆中的动画片段,都与标识符相关联。我想动态地将动画片段添加到舞台上。
我尝试了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);
}
}}
答案 0 :(得分:2)
使用getDefinitionByName时,您始终必须在代码中显式使用这些类。 这意味着如果你使用的是在veg [0] - “appel”中定义名称的类 - 你必须“强制”编译器包含该类。 刚刚在代码的开头写道:
var dummyAppel:appel;
...并为要通过名称检索的所有类执行此操作。 希望它有所帮助
答案 1 :(得分:0)
将getDefinitionByName
与库结合使用时,必须确保剪辑已链接。检查库中的链接列,这是将用作类名的别名。
答案 2 :(得分:0)
您可以采用稍微不同的方法,您可以在此示例中看到:
以下是库中两个movieclip符号的图像:
我将他们的类名存储在文档类的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