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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.10.2017, 08:05
_Георгий_ вне форума Посмотреть профиль Отправить личное сообщение для _Георгий_ Найти все сообщения от _Георгий_
  № 1  
Ответить с цитированием
_Георгий_

Регистрация: Oct 2017
Сообщений: 3
По умолчанию Какая кнопка нажата?

На экране 50 кнопок. Включен слушатель мыши. Необходимо определить, какая кнопка нажата.

Код AS3:
function myClick(event: MouseEvent): void {
 
	if (Even.Target == "[object b_01]") mc_1 = new MC01();
	if (Even.Target == "[object b_02]") mc_1 = new MC02();
	……………………………………………………………….
	if (Even.Target == "[object b_50]") mc_1 = new MC50();
 
}
Можно ли как-то унифицировать «определитель», чтобы «тупо» не писать 50 строк. Ведь, в trace(event.target) мы видим объект, по которому был произведён клик, например, "[object b_35]". Можно ли из "[object b_35]" как-то выделить «35». Потом сложить в строковой переменной «MC» + «35» = «MC35», а затем как-то «подставить» в «new MC35()»?


Последний раз редактировалось _Георгий_; 17.10.2017 в 12:36.
Старый 17.10.2017, 08:16
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

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

Старый 17.10.2017, 22:25
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 3  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Цитата:
Сообщение от _Георгий_ Посмотреть сообщение
Можно ли из "[object b_35]" как-то выделить «35». Потом сложить в строковой переменной «MC» + «35» = «MC35», а затем как-то «подставить» в «new MC35()»?
Сами же описали решение... Ответ: можно.

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
event.target - это не строка, а объект.
У вас должно быть
Код AS3:
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();
 
}
Как быдлокодерский вариант
Код AS3:
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.
Старый 17.10.2017, 23:22
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
я бы "сложил" все кнопки в массив и все классы мувиков в другой массив — даже безотносительно задачи, просто чтобы иметь на них упорядоченные ссылки. Ну и потом — кликнули, узнали индекс event.target в массиве и взяли класс мувика из второго массива. Через строки реально не комильфо.
__________________
Reality.getBounds(this);

Старый 17.10.2017, 23:29
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 6  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Цитата:
Сообщение от Wolsh Посмотреть сообщение
я бы "сложил" все кнопки в массив и все классы мувиков в другой массив — даже безотносительно задачи, просто чтобы иметь на них упорядоченные ссылки. Ну и потом — кликнули, узнали индекс event.target в массиве и взяли класс мувика из второго массива. Через строки реально не комильфо.
Вива! Очень кратко описали

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
А можно сделать это с помощью одного массива, называется Dictionary - словарик)
Правда инициализация у него не совсем красивая, надо как ни крути писать
Код AS3:
mcs[btn1] = MC1;
mcs[btn2] = MC2;
...
Хотя это решаемо с помощью цикла и getDefinitionByName()

Код AS3:
var mcs:Dictionary = new Dictionary();
for(var i:int = 1; i < 50; i++)
	mcs[this["btn" + i]] = getDefinitionByName("MC" + (i < 10)?"0":"" + i);
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 17.10.2017 в 23:47.
Старый 18.10.2017, 06:42
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Код конечно кривой, как у же написали. Но решить эту задачу можно простой регуляркой
Код AS3:
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();
Как-то так.
Но работать это будет, только если в названии класса действительно есть числа в конце
__________________
Ко мне можно и нужно обращаться на ты)

Старый 18.10.2017, 10:32
_Георгий_ вне форума Посмотреть профиль Отправить личное сообщение для _Георгий_ Найти все сообщения от _Георгий_
  № 9  
Ответить с цитированием
_Георгий_

Регистрация: Oct 2017
Сообщений: 3
Всем большое спасибо!

P.S.
Использую вариант от ZackMercury. Только вместо:
Код AS3:
var SomeMC:Class = flash.utils.getDefinitionByName("MC" + num);
сделаю:
Код AS3:
var SomeMC:Class = flash.utils.getDefinitionByName("MC" + num) as Class;


Последний раз редактировалось _Георгий_; 18.10.2017 в 11:40.
Старый 18.10.2017, 10:33
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 10  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от ZackMercury Посмотреть сообщение
Как быдлокодерский вариант
Код AS3:
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();
}
Быдлокодерский - хорошее определение . По каким критериям ты относишь код к такому?

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

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

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


 


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


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