我认为这是一项直接的工作,但它不是:(。 你现在可以看到我如何设计我的代码。 请帮忙
答案 0 :(得分:4)
将事件监听器添加到child3
。 child2.child3
无效。
child3 = new Child3();
child3.addEventListener("ShipCreated", onShipCreated);
child2.addChild(child3);
如果您想要访问child2
的孩子,则必须使用getChildAt
或getChildByName
才能获得此项。例如:
child2.getChildAt(0).addEventListener(...);
虽然在这种情况下直接使用child3会更好。
此外,您将从Child3
的构造函数调度,该构造函数在添加事件处理程序之前发生。所以你的处理程序不会被调用。您需要在添加事件处理程序后调度才能使其正常工作。
答案 1 :(得分:1)
您必须将dispatchEvent调用放在其他方法中,而不是在构造函数中。也许在ADDED_TO_STAGE处理函数上。
创建Event实例时,必须传递另一个参数,指示事件将被传播(在引用中称为气泡)
dispatchEvent("ShipCreated", true);
答案 2 :(得分:0)
谢谢你们:
解决了这个问题
public function Child3()
{
addEventListener(Event.ADDED_TO_STAGE, checkShip);
}
private function checkShip(e:Event):void
{
dispatchEvent(new Event("ShipCreated"));
}