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

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

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

Регистрация: Jan 2011
Сообщений: 247
Question Связка двух объектов

Есть два объекта, оба обрабатывают событие нажатие мыши , при нажатии любого из этих двух объектов они оба меняют свою цветовую альфу(после определенного периода альфа возвращается в начальное положение).

Теперь если бы в приложении было бы всего два таких объекта то тут бы и проблем не было( накидал в оба обработчика противоположный объект на уменьшение альфы и все), но когда их больше 100 не делать же нам 100+ функций "парности объектов".
Я пришел к такому выводу :
Код AS3:
protected function eNum(num:Number):void{
var arrNumG:Array = [btnG0,btnG1,btnG2,btnG3];
var arrNumB:Array = [btnB0,btnB1,btnB2,btnB3];
var pushObjG:Object = new Object();
var pushObjB:Object = new Object();
pushObjG = arrNumG[num];		
pushObjB = arrNumB[num];
// ну и дальше что хотим то и делаем с ними с первым и вторым объектом, например:
pushObjG.visible = false;
pushObjB.visible = false;
}
Но в моем решении моей проблемы есть уйма неудобств:
1. если объектов больше 100+ а то и больше я мягко говоря "устану" вписывать массив все объекты по правильному порядку
2.я на каждый объект вписываю в событие уже определенную цифру вот так click="eNum(1)", ( да у меня компоненты ну суть остается та же )
3.я не думаю что это вообще правильное решение

Кто сталкивался с такой проблемой ? Или может кто подскажет как "связать(обьеденить)" два объекта( а то и больше ) ?

Старый 15.10.2013, 16:50
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 2  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
накидал в оба обработчика противоположный объект на уменьшение альфы и все
Можно немного подробней прокомментировать вот эту строчку - Вы говорите о создании двух обьектов А и В и чтобы они слушали друг друга создать в А экземпляр В и наоборот?

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

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Можно немного подробней прокомментировать вот эту строчку - Вы говорите о создании двух обьектов А и В и чтобы они слушали друг друга создать в А экземпляр В и наоборот?
Нет все проще:
Код AS3:
private function statClick(event:Event):void{
if(event.currentTarget.id = 1_obj || event.currentTarget.id = 2_obj){
1_obj.alpha = 0.5;
2_obj.alpha = 0.5;
}
я не знаю зачем вам это, ну я не думаю что это тоже хороший вариант

в моем случае создать в А экземпляр В , вообще не вариант :\

Старый 15.10.2013, 17:20
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 4  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
я не знаю зачем вам это, ну я не думаю что это тоже хороший вариант
я просто хотел уточнить. Вот чтобы не писать в каждом обьекте слушатель, то можно унаследоваться от класса в котором такой слушатель есть. И при клике он будет вызывать событие "СменаАльфы", но тогда в каждом потомке руками придётся подписывать супер класс на событие смены альфы. Но по другому не как.
Можно зайти немножечко дальше, но я пока сам не знаю на сколько это будет правильно, у меня это вопрос дня, который яя задам чуть позже.)
А как у Вас в примере, это неправильно, проверять сто ифоф из одного нажатия. Вот самый лучший вариант - это наследование или интерфейс.

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

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Можно зайти немножечко дальше, но я пока сам не знаю на сколько это будет правильно, у меня это вопрос дня, который яя задам чуть позже.)
Уже заинтересован
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
А как у Вас в примере, это неправильно, проверять сто ифоф из одного нажатия.
чтоб не проверять сто ифоф, я сделал так как в первом посту этой темы
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Вот самый лучший вариант - это наследование или интерфейс.
Я тоже думаю что в эту сторону стоит копать, но пока идей нет

Старый 15.10.2013, 19:13
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 6  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
я как всегда поспешил.) Если Вам надо из более чем ста обьектов сделать пары, то наверное Вы правильно сделали. Вот если бы при нажатии на один у ста должно что то измениться, то такой подход был бы утомителен. Но если именно по парам, то по другому то и не как наверное.

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

Регистрация: Jan 2011
Сообщений: 247
Вот интересно что если на все рабочее пространство "раскидать кружочки" рандомом( пусть они все одинакового цвета и размера (допустим в 3 px) ), и создать их порядка нескольких тысяч массивом, и при нажатии на любой кружочек, с этих тысячи кружков мелькнул(подсветился) "брат кружка, клацнутого кружка"

Вот мне кажется реализация этого примера подойдет мне, только что их будет объединять...("братьев")?

Еще я размышлял возможно ли сделать так :
Код AS3:
var obj_1G:Object = new Object();
var obj_1:Object = new Object();
private function statClick(event:Event):void{
(event.currentTarget.length - 1).visible = false ; // вообщим идея в том чтоб убрать последнюю букву имени объекта, тем самым мы уже работаем с "братом" .
}
Ну ясное дело что так нельзя) ну идея такая тоже присутствовала.... мб такая реализация возможна только другим путем ?


Последний раз редактировалось GrafMine; 15.10.2013 в 19:58.
Старый 15.10.2013, 20:24
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 8  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Не очень вчитывался, по этому не судите, если не подойдет...
Решение навскидку:
1) Завести себе словарь (http://help.adobe.com/ru_RU/FlashPla...ictionary.html).
2) Создавать парные объекты вместе.
3) Пихать каждый объект в словарь как ключ, а значением будет его брат.
Код AS3:
var dict:Dictionary = new Dictionary(); // Пункт 1
...
var objA:MyObj = new MyObj();
var objB:MyObj = new MyObj(); // Пункт 2
...
dict[ objA ] = objB;
dict[ objB ] = objA; // Пункт 3
Далее в обработчике просто делаете свое грязное дело с (event.target as MyObj) и (dict[ event.target ] as MyObj)

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

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от elder_Nosferatu Посмотреть сообщение
Не очень вчитывался, по этому не судите, если не подойдет...
как альтернативный вариант - да, как подход к вопросу на 1000+ объектов - нет.

Пункт 3 у Вас сильно "мучительный" и требует присваивание " вручную" к каждому объекту. И на мой взгляд, мой пример в первом посте более универсален в плане учета громадности в 100 объектов. ( могу ошибаться )

Старый 15.10.2013, 22:21
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 10  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
как подход к вопросу на 1000+ объектов - нет.
я его пробовал и оказалось, что он хороший при условии, что все обьекты одинаковые, как Вы и предлагали.
Если все обьекты разные, то Вы не сможете создать их даже циклом. Единственное что можно сделать, это создать два массива, один для одного типа обьектов, а другой для другого. Потом циклом их загнать в третий массив чередуя. Потом при клике искать таргет в третьем массиве и узнавать его номер. Если номер четный, то выбираем его и его брата, который равняется на порядок меньше.

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

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

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


 


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


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