![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Feb 2015
Сообщений: 7
|
Добрый день, по циклу создаю кнопки. Хочу к ним привязать действия.
В итоге кнопки создаются выводятся на экран но события не обрабатываются. function newButton(text){ lectionCount=lectionCount+1; var t:TextField = new TextField(); t.text = text; item[lectionCount]=new SimpleButton(t); // создаю кнопку item[lectionCount].x = 300; item[lectionCount].y = 100+25*lectionCount; item[lectionCount].addEventListener(MouseEvent.CLICK, clickMenu); //привязываю обработчик события addChild(item[lectionCount]); } //**************************************************** function clickMenu(event:Event):void { // обработчик trace('click'); } Последний раз редактировалось Antonpro; 02.03.2015 в 10:45. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Для оформления своего кода надо использовать теги [as3][/as3]
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Apr 2013
Сообщений: 89
|
В цикле создаешь кнопки,
далее в этом же цикле создаешь массив, в массив загоняешь каждую кнопочку, массив подписываешь на событие, а в обработчике обратиться к конкретной кнопке можно через, e.target - это объект из массива. |
|
|||||
|
Регистрация: Feb 2015
Сообщений: 7
|
Еще вопрос, кнопки с Вашей помощью создал код такой:
function newButton(title,file){ lectionCount=lectionCount+1; var t:TextField = new TextField(); t.text = title; item[lectionCount]=new SimpleButton(t); item[lectionCount].hitTestState = t; trace(title,lectionCount); item[lectionCount].x = 300; item[lectionCount].y = 100+25*lectionCount; item[lectionCount].name = title; item[lectionCount].addEventListener(MouseEvent.CLICK,clickMenu); addChild(item[lectionCount]); } вылетаю с ошибкой TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at main_fla::MainTimeline/allElements() |
|
|||||
|
.
|
Попробуйте так, без stage.(removeChildAt)
|
|
|||||
|
Код некрасивый. Последний кусок с ошибкой.
Вы передаёте вместо индекса с которого удалить объект сам объект в removeChildAt. Я подозреваю, вы хотели написать просто removeChild. Но так или иначе, один(последний добавленный) элемент массива удалён не будет, сами угадайте, почему. Добавлено через 2 минуты И прикол в том, что вы скорее всего случайно удалили сам MainTimeline из DL ![]() Поэтому ссылка на stage пропадает, скорее всего, и вылетает эта ошибка. Добавлено через 8 минут Секунду, на лицо непонимание различий между stage.addChild и просто addChild. Объясняю: stage.numChildren == 1 в самом начале. trace(stage.getChildAt(0)); == object MainTimeline. На сцене находится главная линия времени. Когда вы пишете addChild(item), вы неявно используете this.addChild(item), тоесть добавляете item не рядом с MainTimeline, а в дисплей лист самого MainTimeline(который изначально пуст). Удаляя item из stage не удалит объект, который вы добавляли в Main, так как его попросту там нет. Да, stage.contains(item) выдаст true, потому, что этот метод учитывает вложенности. Добавлено через 12 минут P.S. код очень некрасивый.
__________________
There is no thing in this world that is not simple. |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
vlbuto плиз, напишите тут или пришлите мне пример кода, как сделать, а то давно про это читал, но без примера не врубаюсь, использую другие подходы
|
|
|||||
|
Регистрация: Feb 2015
Сообщений: 7
|
dimarik, да действительно, такой вариант проходит, и видимо объекты с цены удаляются, судя по логу, но в результате сцена стает черной и ничего на ней невидно. в чем может быть причина?
|
|
|||||
|
.
|
Цитата:
На такие вопросы обычно может ответить дебаггер, либо, если не владеете дебаггером, а вы им не владеете, то выложенный сюда *.fla файлик, с присутствующей в нем неподобающим поведением, поможет нашим добрым людям найти и указать на ошибку. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:42. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|