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