我遇到了类中的addChild()问题。
我有一个 Ball 类:
package {
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.*;
import Achievement;
public class Ball extends Sprite {
//the image I want to add
var mc:MovieClip;
public function Ball() {
addEventListener(Event.ADDED, beginClass);
}
private function beginClass(event:Event):void {
mc = new BallImage();
addChild(mc);
}
}
}
其中 BallImage 是为ActionScript导出的库中的movieClip。
我将它添加到主要内容中:
import Ball;
var littleBall:Ball = new Ball();
addChild(littleBall);
littleBall.x=100;
littleBall.y=100;
图像加载得很好,我可以在屏幕上看到它。但是我得到了堆栈溢出错误。一切似乎都很好......所以我无法弄清问题是什么。
编辑:如果我将addChild()移动到 Ball 的构造函数,则错误消失。还是不知道那是什么意思。为什么我不能在加载时添加它?
答案 0 :(得分:3)
Event.ADDED
就会触发。所以当你添加Ball时它会触发一次,然后每次向Ball添加一个新的BallImage时都会递归触发。
修复:
在beginClass函数的开头删除事件侦听器,或者使用Event.ADDED_TO_STAGE
代替(在触发后你也应该删除侦听器)。
如果您不需要专门监听这些事件,您也可以直接从构造函数中调用beginClass并完全绕过事件。
答案 1 :(得分:1)
问题是你永远不会清理你的事件监听器。
private function beginClass(event:Event):void {
removeEventListener(Event.ADDED, beginClass); // add this line
mc = new BallImage();
addChild(mc);
}
当您添加BallImage时,它会再次触发Event.ADDED事件,因此您需要在添加其他内容之前删除该侦听器。