Flash CS4中的ActionScript 3阵列转换问题
我有这些阵列Flash CS4中的ActionScript 3阵列转换问题,flash,actionscript-3,arrays,casting,flash-cs4,Flash,Actionscript 3,Arrays,Casting,Flash Cs4,我有这些阵列 //Array elements are Sprites (Class) in Flash Library var elements:Array = new Array (el1_spr, el2_spr, el3_spr); var container:Array = new Array(); for var (i:uint; allElements.length; i++){ container.push(allElements
//Array elements are Sprites (Class) in Flash Library
var elements:Array = new Array (el1_spr, el2_spr, el3_spr);
var container:Array = new Array();
for var (i:uint; allElements.length; i++){
container.push(allElements[i]);
var v:Sprite = (allElements[i] as Sprite);
addChild(container[i]);
Puzzle.polozaj.(container[i]);
//Error is:
//TypeError: Error #1034: Type Coercion failed: cannot convert el1_spr$ to flash.display.DisplayObject.
at project_fla::MainTimeline/frame1()
}
看起来您可能可以将
v
添加到显示列表,而不是container[i]
。你试过了吗
更新:事实上,我认为问题来自循环定义中的第二项。它应该是i
,而不是allegements.length
。按照您设置它的方式,它的运行时间比它应该运行的时间多了一倍
下面是一些工作代码,基于您在上面发布的内容。如果我需要澄清,请给我留言(任何人-到目前为止,这是一个艰难的早晨…)
var el1\u spr:Sprite=新Sprite;
变量el2_spr:Sprite=新Sprite;
变量el3_spr:Sprite=新Sprite;
el1_spr.graphics.Beginll(0x0000FF);
el1_spr.graphics.移动到(0,0);
el1_spr.graphics.lineTo(100,0);
el1_spr.graphics.lineTo(100100);
el1_spr.graphics.lineTo(0100);
el1_spr.graphics.lineTo(0,0);
el1_spr.graphics.endFill();
el2_spr.graphics.beginll(0x00FF00);
el2_spr.graphics.移动到(0,0);
el2_spr.graphics.lineTo(100,0);
el2_spr.graphics.lineTo(100100);
el2_spr.graphics.lineTo(0100);
el2_spr.graphics.lineTo(0,0);
el2_spr.graphics.endFill();
el3_spr.graphics.beginll(0xFF0000);
el3_spr.graphics.移动到(0,0);
el3_spr.graphics.lineTo(100,0);
el3_spr.graphics.lineTo(100100);
el3_spr.graphics.lineTo(0100);
el3_spr.graphics.lineTo(0,0);
el3_spr.graphics.endFill();
变量元素:数组=新数组(el1_spr、el2_spr、el3_spr);
变量容器:数组=新数组();
for(变量i:uint;i
我不知道您的代码的上下文是什么,但为了说明它的价值,我添加了几行代码,以表明您不一定需要容器
数组,也不一定需要创建v
希望对您有所帮助。Sprite确实继承自DisplayObject 继承链如下所示: 精灵->显示对象容器->交互对象->显示对象 关于您的代码,我的问题是:
为什么要将已经是精灵的对象强制转换为精灵?首先声明
元素
,然后使用等位基因
。是不是应该这样
当您使用as运算符进行强制转换时,您设置了局部变量v
,但从不使用它。如果强制转换不可行,则会返回null。所以这里不会出现错误
对我来说,这看起来像是allegements
不包含DisplayObject
元素
还有行Puzzle.polozaj.(容器[i])代码>,看起来有点奇怪。也许你在polozaj之后有点太多了?el1\u spr
是一个类
对象而不是精灵
你应该做:
var s:Sprite = new el1_spr() as Sprite;
为了获取您的精灵
对象。谢谢您的帮助。我已经清除了这里的代码和上下文
元素数组中的值是Flash库中的对象
el1_spr、el2_spr、el3_spr是符号属性中的类名。
符号的基类是flash.display.Sprite(符号属性)
我需要将这个库精灵添加到舞台上,并使用Puzzle.polozaj(类,方法)处理它们
var元素:数组=新数组(el1\u spr、el2\u spr、el3\u spr);
for(变量i:uint;i
我解决了这个问题。
我只需要创建符号的新实例,并将变量名作为数组中的引用
是否有一个选项可以将线程标记为已解决
伟大的网站顺便说一句 一般来说,最好使用数组文本而不是构造函数。在AS3中有很大的不同:
当然,考虑到上述情况,使用Vector会更好。在代码中,您有一个名为“elements”的数组和一个名为“allegements”的数组。看起来它们应该是一样的。而且,var关键字需要在paren中——for(var i:uint…)是oxmo发布的正确答案。。。然而,它让我惊讶,你的代码运行。。。例如:Puzzle.polozaj.(容器[i])。。。一定是某种打字错误或其他什么。。。greetzAn数组是非类型化的,所以它实际上是正确的做法。@blackberryoctopus——是的,早上的开始很糟糕。在有人看到我的答案之前,我没有足够快地纠正它。:)谢谢你的更正。在将来,最好还是把那些错误答案的评论贴在上面,以免你的答案在错误答案被修正后变得混乱。
var s:Sprite = new el1_spr() as Sprite;
var elements:Array = new Array (el1_spr, el2_spr, el3_spr);
for (var i:uint; i < elements.length; i++){
addChild(elements[i]);
Puzzle.polozaj(elements[i]);
}
//TypeError: Error #1034: Type Coercion failed: cannot convert a1_spr$ to flash.display.DisplayObject.
at puzzle_fla::MainTimeline/frame1()