Как получить все кнопки в AIR/Flash

Я использую следующий код, чтобы зарегистрировать функцию для события клика всех SimpleButtonвнутри меня swf файл. SimpleButtons, что их имя начинается с 'b', должно быть зарегистрировано. Но это не работает для всех кнопок. Некоторые из кнопок в другом 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)
    {
    }
}

Пожалуйста помоги!:(

1 ответ

Решение

Вам нужно позвонить findChild(this) на каждом кадре, потому что, если вы вызываете его на первом кадре, только объекты в последующих кадрах еще не загружены (и, следовательно, недоступны). Вы можете использовать hasEventListener чтобы убедиться, что вы не добавляете один и тот же прослушиватель дважды (или используете какой-либо массив, чтобы отслеживать, какие кадры вы вызывали findChild(this) на).

В любом случае, ваш метод не очень хороший, и его было бы кошмаром поддерживать. Вы должны попытаться добавить слушателей событий "вручную". Это, вероятно, не займет так много работы, и в долгосрочной перспективе будет проще поддерживать.

Другие вопросы по тегам