Actionscript 3 类型强制失败:无法将[]@13a355b9转换为flash.display.DisplayObject
我在运行时遇到这个错误,没有编译错误Actionscript 3 类型强制失败:无法将[]@13a355b9转换为flash.display.DisplayObject,actionscript-3,Actionscript 3,我在运行时遇到这个错误,没有编译错误 package { import flash.display.*; import flash.events.*; import flash.utils.*; public class mainCode extends MovieClip{ //global variables go here public var circled:Shape = new Shape(); public var circled2:Shape = ne
package {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
public class mainCode extends MovieClip{
//global variables go here
public var circled:Shape = new Shape();
public var circled2:Shape = new Shape();
public var circled3:Shape = new Shape();
public var angled:int = new int();
public var circlearray1:Array = new Array(4);
public var circlearray2:Array = new Array(4);
public function mainCode(){
makeCircle(circled, 100);
makeCircle(circled2, 50);
makeCircle(circled3, 50);
for(var i:int=0; i<4; i++){circlearray1[i] = new Array(20);}
for(var n:int=0; n<4; n++){circlearray2[n] = new Array(20);}
stage.addEventListener(Event.ENTER_FRAME, mainLoop);
}
//functions go here
private function mainLoop(e:Event){
trace(1);
angled+=1;
angled%=360;
circled.x = stage.stageWidth / 2;
circled.y = stage.stageHeight/ 2;
circled2.x = circled.x + 100*Math.cos(radians(angled));
circled2.y = circled.y + 100*Math.sin(radians(angled));
circled3.x = circled.x + 100*Math.cos(radians((angled + 180) % 360));
circled3.y = circled.y + 100*Math.sin(radians((angled + 180) % 360));
trace(2);
for (var i:int = 0; i < 4; i++)
{
trace(3);
if (circlearray1[i][0] != undefined)
{removeChild(circlearray1[i][0]);}
if (circlearray2[i][0] != undefined)
{removeChild(circlearray2[i][0]);}
trace(4);
for (var m:int = 0; m < 19; m++)
{
circlearray1[i][m] = circlearray1[m+1];
circlearray2[i][m] = circlearray2[m+1];
}
circlearray1[i][19] = new Shape();
circlearray2[i][19] = new Shape();
makeCircle(circlearray1[i][19], 25);
makeCircle(circlearray2[i][19], 25);
circlearray1[i][19].x = circled2.x + 50*Math.cos(radians(((-angled + (i*90)) * 2) % 360));
circlearray1[i][19].y = circled2.y + 50*Math.sin(radians(((-angled + (i*90)) * 2) % 360));
circlearray2[i][19].x = circled3.x + 50*Math.cos(radians(((-angled + (i*90)) * 2) % 360));
circlearray2[i][19].y = circled3.y + 50*Math.sin(radians(((-angled + (i*90)) * 2) % 360));
trace(8);
}
}
private function makeCircle(circles:Shape, radius:int)
{
circles.graphics.clear();
circles.graphics.lineStyle(2,0x000000);
circles.graphics.beginFill(0x990000);
circles.graphics.drawCircle(0,0,radius);
circles.graphics.endFill();
addChild(circles);
}
private function degrees(radians:Number):Number
{
return radians * 180/Math.PI;
}
private function radians(degrees:Number):Number
{
return degrees * Math.PI / 180;
}
private function killCircle(circlei:Shape):void {
removeChild(circlei);
}
}
}
我将其追溯到{removeChildcirclearray1[I][0];},它似乎返回了错误。我不知道它为什么会这样做,我尝试过其他方法,例如circlearray1[I][0].parent.removeChildcirclearray1[I][0];如果circlearray1[i][0]是形状,但是没有骰子
作为参考,我试着让一些圆围绕着其他圆,但让最外层的圆在移动时留下图像滞后或后像。为此,我使用for循环和多维数组创建对象并删除它们,因为我不想手动键入50个create object调用并手动编辑每个调用。可能,这部分:
for (var m:int = 0; m < 19; m++)
{
circlearray1[i][m] = circlearray1[m+1];
circlearray2[i][m] = circlearray2[m+1];
}
您如何确定removeChildcirclearray1[i][0];原因是什么?请尝试在构造函数启动之前初始化形状。当我有一个不是在方法中实例化的库对象时,我有时会遇到这些错误。因此,将“public var circled:Shape=new Shape;”替换为“public var circled:Shape=new Shape;”只要做`公共变量圈:Shape;`然后在构造器主代码中实例化对象。在AS3中,最好不要在类定义中实例化任何非灵长类。@BadfeelingAbout这是我通过跟踪确定的,现在删除了一个跟踪,跟踪在if语句和removeChild之间。我尝试了您所说的将实例化器移动到主代码中,但错误仍然发生。我应该注意的是,代码确实在运行,中心圆被绘制,环绕它的两个圆也被绘制并环绕它,但是环绕这两个圆的外部4个圆什么也不做,它们保留/创建的位置与代码初始化时的位置完全相同。也不确定我为什么被否决……啊!我怎么没注意到那个打字错误?这就解决了,谢谢你D@Dimentio因为你的代码太复杂了。在那密集的剧本中迷失方向并不难。
for (var m:int = 0; m < 19; m++)
{
circlearray1[i][m] = circlearray1[i][m+1];
circlearray2[i][m] = circlearray2[i][m+1];
}
trace(3);
// If you are sure the first element is not empty
// you can get its reference removing them from
// the Array at the same time.
removeChild(circlearray1[i].shift());
removeChild(circlearray2[i].shift());
trace(4);
// All Array elements are automatically shifted
// by -1 so you don't need to move each of them manually.
circlearray1[i][19] = new Shape();
circlearray2[i][19] = new Shape();