Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.02.2015, 17:59
Antonpro вне форума Посмотреть профиль Отправить личное сообщение для Antonpro Найти все сообщения от Antonpro
  № 1  
Ответить с цитированием
Antonpro

Регистрация: Feb 2015
Сообщений: 7
По умолчанию Динамические кнопки и обработчики

Добрый день, по циклу создаю кнопки. Хочу к ним привязать действия.
В итоге кнопки создаются выводятся на экран но события не обрабатываются.
Код AS3:
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.
Старый 17.02.2015, 22:40
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Для оформления своего кода надо использовать теги [as3][/as3]
__________________
Reality.getBounds(this);

Старый 23.02.2015, 15:28
vlbuto вне форума Посмотреть профиль Отправить личное сообщение для vlbuto Найти все сообщения от vlbuto
  № 3  
Ответить с цитированием
vlbuto

Регистрация: Apr 2013
Сообщений: 89
В цикле создаешь кнопки,
далее в этом же цикле создаешь массив,
в массив загоняешь каждую кнопочку,
массив подписываешь на событие,
а в обработчике обратиться к конкретной кнопке можно через, e.target - это объект из массива.

Старый 12.03.2015, 17:28
Antonpro вне форума Посмотреть профиль Отправить личное сообщение для Antonpro Найти все сообщения от Antonpro
  № 4  
Ответить с цитированием
Antonpro

Регистрация: Feb 2015
Сообщений: 7
Еще вопрос, кнопки с Вашей помощью создал код такой:
Код AS3:
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]);
	}
Пробую удалить объекты кнопок и обработчики таким образом,
Код AS3:
while(lectionCount > 0)
{
	lectionCount--;
  stage.removeChildAt(item[lectionCount]);}
вылетаю с ошибкой TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at main_fla::MainTimeline/allElements()

Старый 12.03.2015, 17:49
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 5  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Код некрасивый. Последний кусок с ошибкой.
Вы передаёте вместо индекса с которого удалить объект сам объект в 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.

Старый 12.03.2015, 22:02
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 6  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
vlbuto плиз, напишите тут или пришлите мне пример кода, как сделать, а то давно про это читал, но без примера не врубаюсь, использую другие подходы

Старый 12.03.2015, 23:37
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Попробуйте так, без stage.(removeChildAt)
Код AS3:
while(lectionCount > 0)
{
	lectionCount--;
  removeChildAt(item[lectionCount]);}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 13.03.2015, 15:50
Antonpro вне форума Посмотреть профиль Отправить личное сообщение для Antonpro Найти все сообщения от Antonpro
  № 8  
Ответить с цитированием
Antonpro

Регистрация: Feb 2015
Сообщений: 7
dimarik, да действительно, такой вариант проходит, и видимо объекты с цены удаляются, судя по логу, но в результате сцена стает черной и ничего на ней невидно. в чем может быть причина?

Старый 13.03.2015, 15:52
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 9  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Antonpro, вы мой ответ читали?
__________________
There is no thing in this world that is not simple.

Старый 13.03.2015, 16:16
Antonpro вне форума Посмотреть профиль Отправить личное сообщение для Antonpro Найти все сообщения от Antonpro
  № 10  
Ответить с цитированием
Antonpro

Регистрация: Feb 2015
Сообщений: 7
ZackMercury, безусловно читал, если я правильно понял я случайно удаляю таймлайн, но это было при удалении
Код AS3:
stage.removeChildAt(item[lectionCount])
. Сейчас использую
Код AS3:
removeChildAt(item[lectionCount])
прохожу по всем созданным объектам без ошибки и видимо таки удаляю их. Но только сцена стает черной. а так все работает. Если я неправ подскажите пожалуйста, что я не так делаю.

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:54.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.