我在移除舞台上的实例时遇到了麻烦。
单击按钮2次后我一直遇到的错误是
“提供的DisplayObject必须是调用者的子级”
有人可以帮我吗?
package src
{
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
import flash.events.MouseEvent;
public class Main extends MovieClip
{
var positionY:Number = 80;
var positionX:Number = 0;
var motion:MovieClip;
var fCombo:Array = new Array();
var n:Number;
public function Main()
{
generate.addEventListener(MouseEvent.MOUSE_UP, loop);
generate.addEventListener(MouseEvent.MOUSE_DOWN, remove);
n = Number(inputText.text);
}
function loop(me:MouseEvent):void
{
var combo:Array = [Punch, Kick, Knee, Elbow];
n = Number(inputText.text);
for(var i:Number = 0;i < n;i++ )
{
motion = new combo[randomNumber(4)]();
fCombo.push(motion);
motion.y = positionY;
motion.x = positionX;
positionX += 100;
addChild(motion);
if (i == 4 || i == 9 || i == 14)
{
positionY += 40;
positionX = 0;
}
}
}
function remove(me:MouseEvent):void
{
for (var j:Number = 0; j < n; j++ )
{
removeChild(fCombo[j]);//error
}
positionY = 80;
positionX = 0;
}
function randomNumber(max:Number):Number
{
return(Math.floor(Math.random() * max ));
}
}
}
答案 0 :(得分:1)
您将创建的新对象添加到阵列中,然后使用它删除它们。但是您忘记创建新列表或从旧列表中删除对象。因此,当时间循环遍历列表时,您将尝试删除已经删除的对象。
您可以通过多种方式解决此问题,一种方法是从循环中的舞台和数组中删除对象:
function remove(me:MouseEvent):void
{
while(fCombo.length)
{
removeChild(fCombo.pop());
}
positionY = 80;
positionX = 0;
}
答案 1 :(得分:0)
targetDisplayObject.parent.removeChild(targetDisplayObject);假设父级不为空,这个技巧是什么。