Лучший способ обработки EventListeners / Handlers для 1000 кнопок? - PullRequest
0 голосов
/ 18 августа 2011

Я работаю над игрой, в которой пользователи могут выигрывать кнопки / значки в качестве наград.По моим оценкам, всего будет получено около 500 наград.

Я хочу разрешить пользователям продавать свои дубликаты / нежелательные значки банку и покупать новые в банке.

Япоказывая значки в нескольких рамах награды.Ниже значков я показываю счетчик, а также кнопки «Купить» и «Продать».

Мой вопрос таков: как лучше всего обрабатывать ОЧЕНЬ МНОГИЕ кнопки покупки и продажи?Есть ли способ обойти кодирование 1000 eventListeners и 1000 eventHandlers?

Одним из возможных решений является постепенное присвоение имен моим кнопкам, например "buy_mc1", "buy_mc2" и т. Д. Затем выполните цикл для создания прослушивателей для этого ["buy_mc" + i].Тем не менее, я должен был бы ОЧЕНЬ убедиться, что я правильно связал их с наградами.

В настоящее время в моей базе данных есть поле "award_mc", в котором хранится название мувиклипа в моем .fla,Из этого я могу получить доступ к связанным активам, таким как поле count, например: this [db.award_mc + "_count"]. Txt.

К сожалению, этот метод не очень хорошо подходит для зацикленного доступа.

Может быть, я смогу создать массив имен видеоклипов, которые будут синхронизированы с кнопками покупки / продажи.Например:

myArray = {aMissionAward, anotherAward, ubernessAward};

Мои кнопки будут такими: buy_0, buy_1, buy_2 и т. Д.

Когда кто-то нажимает кнопку,Я могу связать buy_2 с «ubernessAward», а затем искать «ubernessAward» в базе данных.

Как я могу получить номер с кнопки?Даже если мне удастся выполнить настройку eventListeners, придется ли мне настраивать отдельные события EventHandlers для обработки правильного номера индекса?

Я открыт для предложений по другому способу сделать это.

-------------------------- РЕДАКТИРОВАТЬ ----------------------------

Вот мое решение.Попросите Йенса Струве указать мне правильное направление.

Мне не удалось заставить это работать с кнопками на сцене.Судя по всему, кнопки являются статическим классом.MovieClips являются динамическими, поэтому я смог заставить это работать с помощью MovieClips.Вот что я сделал:

Добавил 3 мувиклипа на сцену.Назвали их «mc0», «mc1» и «mc2».

Добавьте этот код AS3:

for (var i:Number=0; i<3; i++)
{
    this["mc" + i].addEventListener( MouseEvent.CLICK, onMcClick );
    this["mc" + i].awardKey = i;
}

function onMcClick( evt:MouseEvent ):void
{
    trace("MC ID = " +(evt.target).awardKey);

    switch ((evt.target).awardKey)
    {
        case 0:
            trace("     Do stuff for 0");
            break;
        case 1:
            trace("     Do stuff for 1");
            break;
        case 2:
            trace("     Do stuff for 2");
            break;      
    }
}

Отсюда я могу связать awardKey с массивом имен MovieClip.Затем я могу использовать имена MovieClip для чтения моей базы данных.

Вот почему я впервые сталкиваюсь со Stack Overflow, когда у меня возникает проблема.:)

Ответы [ 2 ]

6 голосов
/ 18 августа 2011

Вам нужен только один слушатель, который может обрабатывать все ваши кнопки:

  1. Пусть ваши события покупки и продажи нажимают кнопку пузыря.

  2. Присвойте каждой кнопке уникальный идентификатор, например myButton.awardKey = "uberness";

  3. Зарегистрируйте одного прослушивателя событий в контейнере всех ваших кнопок.

  4. Определитефактическая кнопка нажата с помощью event.target, а тип вознаграждения - с помощью MyButton(event.target).awardKey.

0 голосов
/ 18 августа 2011

Есть несколько способов справиться с этим.

Вы еще не сказали, используете ли вы пользовательское событие или собственное событие Flash.Если вы слушаете нативное событие Flash, которое вспыхивает (проверьте документы для вашего события), или вы генерируете настраиваемое событие, которое вы пузырите, вы можете просто прослушать родительский DisplayObjectContainer, который содержит все кнопки.Затем используйте event.target, чтобы определить, какая кнопка на самом деле сгенерировала событие.

Другой способ справиться с этим - прослушать событие ADDED_TO_STAGE, а затем обработать что-то вроде этого:

НТН;Эй

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...