Как получить все кнопки в AIR/Flash
Я использую следующий код, чтобы зарегистрировать функцию для события клика всех SimpleButton
внутри меня swf
файл. SimpleButton
s, что их имя начинается с '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)
на).
В любом случае, ваш метод не очень хороший, и его было бы кошмаром поддерживать. Вы должны попытаться добавить слушателей событий "вручную". Это, вероятно, не займет так много работы, и в долгосрочной перспективе будет проще поддерживать.