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

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

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

Регистрация: Apr 2010
Сообщений: 4
По умолчанию создать неопределенное количество кнопок

Необходимо создать на экране кнопки с вариантами голосования. Количество вариантов каждый раз разное.

var buttonNumber1= new myButton();
var buttonNumber2= new myButton();
var buttonNumber3= new myButton();
...
var buttonNumberN= new myButton();

есть какой-нибудь способ сделать так?

Старый 25.04.2010, 12:37
vinch вне форума Посмотреть профиль Отправить личное сообщение для vinch Найти все сообщения от vinch
  № 2  
Ответить с цитированием
vinch

Регистрация: Feb 2010
Сообщений: 95
Создавать в цикле и запихать в массив?
Код AS3:
var buttonArray:Array = new Array();
for (var i:int = 0; i < numberOfButtons; i++)
    buttonArray.push(new myButton());

Старый 25.04.2010, 13:07
nyamkas вне форума Посмотреть профиль Отправить личное сообщение для nyamkas Найти все сообщения от nyamkas
  № 3  
Ответить с цитированием
nyamkas

Регистрация: Apr 2010
Сообщений: 4
Спасибо, то что нужно!

Добавлено через 53 минуты
Вот, что у меня получилось:
Код AS3:
var buttonArray:Array = new Array();
for (var i:int = 0; i < numberOfButtons; i++){
    buttonArray.push(new myButton());
    buttonArray[i].myButtonName.text= buttonsNameArray[i];
    addChild(buttonArray[i]);
    buttonArray[i].addEventListener(MouseEvent.CLICK,buttonClick);
}
Как теперь в buttonClick(e:MouseEvent) узнать от какой кнопки пришло событие? какая по счету эта кнопка в массиве buttonArray?

Старый 25.04.2010, 14:31
cauchy вне форума Посмотреть профиль Отправить личное сообщение для cauchy Найти все сообщения от cauchy
  № 4  
Ответить с цитированием
cauchy
 
Аватар для cauchy

Регистрация: Jan 2009
Адрес: Северный островок дефолт-сити
Сообщений: 144
Цитата:
Сообщение от nyamkas Посмотреть сообщение
Как теперь в buttonClick(e:MouseEvent) узнать от какой кнопки пришло событие? какая по счету эта кнопка в массиве buttonArray?
1) В обработчике события сравнивай event.currentTarget в цикле со всеми элементами массива кнопок, как выполниться равенство - это нужная кнопка, прерывай цикл (break), и работай с ней дальше.

2) Если можешь править myButton, то можно там завести свойство id:int, в цикле создания кнопок писать
buttonArray[i].id = i;
и тогда в обработчике можно избежать цикла и писать:
var i:int = MyButton(event.currentTarget).id;
и дальше работать с buttonArray[i].

Как то так, в первом случае меньший объём затрачивается, но и меньшая скорость теоретически, во втором - большая скорость из за отсутствия цикла но и больший объём. Хотя вряд ли в таких масштабах будет какая-то разница.

Старый 25.04.2010, 15:01
nyamkas вне форума Посмотреть профиль Отправить личное сообщение для nyamkas Найти все сообщения от nyamkas
  № 5  
Ответить с цитированием
nyamkas

Регистрация: Apr 2010
Сообщений: 4
я решил проблему через event.stageY, но наверное грамотнее твои решения

Старый 29.04.2010, 19:42
Weax вне форума Посмотреть профиль Отправить личное сообщение для Weax Посетить домашнюю страницу Weax Найти все сообщения от Weax
  № 6  
Ответить с цитированием
Weax
 
Аватар для Weax

Регистрация: Mar 2004
Адрес: Vilnius
Сообщений: 102
Это как-то по кривому. Я до сих пор не знаю хорошего решения!

Ситуация такая: допустим есть буттон или мувиклип MyButton(), аддим его на stage:

Код AS3:
var bb:MyButton;
 
for (var i:int=0;i<200;i++) {
bb = new MyButton();
bb.name = i.toString(); //тут мы изменили параметр name чтобы знать какую кнопку нажали
addChild(bb);
bb.addEventListener(MouseEvent.CLICK, showText);
}
 
function showText(e:MouseEvent):void {
var n:Number = Number(e.target.name);
//теперь мы можем найти, например, нужный нам XML node и показать оттуда текст
}
Однако, если мувиклип был вставлен не динамически мы не можем менять параметр name! Делать какие-то дополнительные массивы ради такой простой штуки, как узнать какая кнопка нажата - это мягко говоря как-то хреново....
Править свой класс и завести там новое свойство очень часто не представляется возможным, и вообще что, если это не класс а клипы вручную вставленные на таймлайн?

Как это красивее сделать?
__________________
WD Solutions

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

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

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


 


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


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