0

我正在使用以下代码为文件中所有SimpleButtons的单击事件注册一个函数swfSimpleButton他们的名字以'b'开头的s必须是注册的。但它不适用于所有按钮。另一个或另一个框架中的一些按钮MovieClip将不可见!我在第一层的第一帧内调用此方法。

findChilds(this);

function findChilds(obj:*):void
{
    if (obj == null)
    {
        return;
    }
    //trace(obj.name);

    if (obj.name.substr(0,1) == "b")
    {
        obj.addEventListener(MouseEvent.CLICK, onMediaClicked);
        trace(obj.name, " registered for click.");
    }
    try 
    {
        // some type of objects hasn't numChildren property, so i 
        // used try/catch statement, i know this way has bad performance. I fix it later
        for (var i:int = 0; i < obj.numChildren; i++)
        {
            findChilds(obj.getChildAt(i));
        }
    }
    catch (e:Error)
    {
    }
}

请帮忙!:(

4

1 回答 1

1

您需要调用findChild(this)每一帧,因为如果您在第一帧调用它,则只有后续帧中的对象尚未加载(因此无法访问)。您可能希望使用hasEventListener它来确保不会两次添加相同的事件侦听器(或使用一些数组来跟踪您调用了哪些帧findChild(this))。

无论如何,您的方法不是一个很好的方法,维护起来将是一场噩梦。您应该尝试“手动”添加事件侦听器。它可能不会花费更多的工作,并且从长远来看会更容易维护。

于 2011-09-19T11:56:25.990 回答