Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash CS4中的ActionScript 3阵列转换问题_Flash_Actionscript 3_Arrays_Casting_Flash Cs4 - Fatal编程技术网

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()