|
|
|||||
Регистрация: Oct 2017
Сообщений: 3
|
Какая кнопка нажата?
На экране 50 кнопок. Включен слушатель мыши. Необходимо определить, какая кнопка нажата.
Можно ли как-то унифицировать «определитель», чтобы «тупо» не писать 50 строк. Ведь, в trace(event.target) мы видим объект, по которому был произведён клик, например, "[object b_35]". Можно ли из "[object b_35]" как-то выделить «35». Потом сложить в строковой переменной «MC» + «35» = «MC35», а затем как-то «подставить» в «new MC35()»? Последний раз редактировалось _Георгий_; 17.10.2017 в 12:36. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Для оформления своего кода используйте теги AS3 (а не Bold).
__________________
Reality.getBounds(this); |
|
|||||
Сами же описали решение... Ответ: можно.
|
|
|||||
event.target - это не строка, а объект.
У вас должно быть function myClick(event: MouseEvent): void { if (event.target.toString() == "[object b_01]") mc_1 = new MC01(); if (event.target.toString() == "[object b_02]") mc_1 = new MC02(); ………………………………………………………………. if (event.target.toString() == "[object b_50]") mc_1 = new MC50(); } function myClick(event: MouseEvent): void { var name:String = flash.utils.getQualifiedClassName(event.target); if(name.charAt(0).toLowerCase() != "b") return; var num:String = name.substr(name.lastIndexOf("_") + 1); var SomeMC:Class = flash.utils.getDefinitionByName("MC" + num); mc_1 = new SomeMC(); }
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 17.10.2017 в 22:58. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
я бы "сложил" все кнопки в массив и все классы мувиков в другой массив — даже безотносительно задачи, просто чтобы иметь на них упорядоченные ссылки. Ну и потом — кликнули, узнали индекс event.target в массиве и взяли класс мувика из второго массива. Через строки реально не комильфо.
__________________
Reality.getBounds(this); |
|
|||||
Цитата:
|
|
|||||
А можно сделать это с помощью одного массива, называется Dictionary - словарик)
Правда инициализация у него не совсем красивая, надо как ни крути писать Хотя это решаемо с помощью цикла и getDefinitionByName()
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 17.10.2017 в 23:47. |
|
|||||
Код конечно кривой, как у же написали. Но решить эту задачу можно простой регуляркой
var objectName:String = event.target.toString(); var digitPart:String = objectName.match( /\d+/)[0]; // выдаст что-то типа 01, 02... в зависимости от имени класса var ClipClass:Class = getDefinitionByName("MC" + digitPart) as Class; mc_1 = new ClipClass(); Но работать это будет, только если в названии класса действительно есть числа в конце
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Oct 2017
Сообщений: 3
|
Всем большое спасибо!
P.S. Использую вариант от ZackMercury. Только вместо: сделаю: Последний раз редактировалось _Георгий_; 18.10.2017 в 11:40. |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
|
Часовой пояс GMT +4, время: 18:14. |
|
« Предыдущая тема | Следующая тема » |
|
|