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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.12.2010, 15:55
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 51  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Пора переименовывать тему в "ошибки детализации"

Артем, у меня такое ощущение, что здесь главный класс как мусорка)) Детализация до уровня "назначить каждой кнопочке в приложении параметры типа маусЧилдрен и слушателей в Главном классе"? Разве нельзя сделать архитектуру иначе? Объединить кнопки в "панели", меню отдельно, HUD отдельно, топПанель, сайдПанель, я не знаю.. Сделать это блоками, и детализация Главного класса будет на уровне меню-панелей, а уже классов этих панелей - на уровне "кнопка.х = 10".
__________________
Reality.getBounds(this);

Старый 20.12.2010, 15:58
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 52  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Psycho Tiger, в вашем коде я вижу монструозный интерфейс, состоящий из логически разделяемых блоков. Есть несколько менюшек, которые можно распихать по контейнерам или вообще превратить в отдельные контролы, что даст возможность перенести в них часть функционала, ну и просто добавить один общий слушатель, вместо того чтобы вешать его персонально на каждую кнопку.
Плюс в самом методе и инициализация ссылок, и добавление слушателей, и включение музыки - в общем саму инициализацию можно разбить на независимые куски, что повысит структурированность и читабельность.
__________________
тонкий тролль, осеянный благодатью

Старый 20.12.2010, 16:19
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 53  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Артем, у меня такое ощущение, что здесь главный класс как мусорка))
Помилуй, какой ж это главный класс? Это просто одна из вьюх начинает синхронизироваться с графикой.

Цитата:
просто добавить один общий слушатель, вместо того чтобы вешать его персонально на каждую кнопку.
А потом по switch (target.name) смотреть куда тыкнули? Как-то это небезопасно "привязываться" не к ссылкам, а какому-то полю name. А когда мне нужно чтобы 2 кнопки вызывали один обработчик (onGoClick у меня вроде есть) - что делать? =)
Или речь об одном обработчике с привязкой просто по target? Идея, наверно, хорошая.

Блок-панели, конечно, здорово. Но, наверное, не в конкретном случае - весь дизайн собран в swc`шке, как можно заметить, а тяну я оттуда элементы, добавляя им поведение. Разницы не будет.
Мне что писать
Код AS3:
clip.addEventListener(click, handler);
что
Код AS3:
panel.addEventLisener(clipClick, hanlder);
Те же яйца, только в профиль.

Старый 20.12.2010, 16:26
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 54  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Цитата:
А потом по switch (target.name) смотреть куда тыкнули?
Боже упаси
Пачку кнопок собрать в меню, которое само будет следить, куда там нажали и какая галочка в этот момент стояла, и посылать наверх пользовательское событие. В итоге вместо сообщения "юзер кликнул по mc1" будем получать сообщение "юзер хочет перейти к инвентарю".
__________________
тонкий тролль, осеянный благодатью

Старый 20.12.2010, 17:12
Хомяк вне форума Посмотреть профиль Отправить личное сообщение для Хомяк Найти все сообщения от Хомяк
  № 55  
Ответить с цитированием
Хомяк
[+1 24.11.10]
 
Аватар для Хомяк

Регистрация: Jun 2010
Сообщений: 280
Получается, вроде как, разделение ради разделения, что ли?
У меня есть подобный класс. Он обеспечивает работу интерфейса пользователя. На панели интерфейса около 30 элементов управления приложением (разделенными на группы лишь визуально, для облегчения ориентации пользователя). Есть список-массив состояний этих элементов, их более 30-ти (учитывая состояния активен/неактивен). Задача класса: предоставить начальное, текущее состояние эл-тов управления, анализировать изменения, по результатам анализа предоставлять либо возможность изменить состояние приложения которое управляется с помощью этого интерфейса, либо получить код приложения.
Механизм реализации: В начале работы класс получает список-массив состояний элементов, тупо (а потому быстро) перебрав элементы, на панели элементов, он изменяет их состояние просто последовательно перебирая список-массив. В результате возникновений событий клик или change на элементах класс вновь перебирает все элементы считывая их текущее состояние формирует массив текущих состояний, сравнивает массивы (начальный и текущий) и если их равенство false, предоставляет возможность пользователю утвердить сделанные изменения. Так же есть кнопка "Cancel" по клику на которой вновь перебираются все элементы (как в начале работы) и назначаются исходные состояния элементов управления.
Что в данном случае даст разделение элементов на группы кроме усложнения и точно замедления реакции приложения? Или в этом случае можно как то по другому разделить?
__________________
Ведь я только всего и хочу, чтобы все всегда было по-моему...

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Из описания не совсем понятно, какая задача решалась, но, на мой скромный взгляд, ООП начинается тогда, когда мы переходим от работы с данными о которых МЫ знаем все (напр. массивов с числами и булевыми переменными), к работе с объектами, которые САМИ о себе знают все. Соответственно, по тому же клику по какой-либо кнопке нам не надо перебирать массив кнопок, чтобы выяснить кого там нажали. Кнопка сама продиспатчит наверх событие MySuperButton.I_WAS_PRESSED или кому как нравится, в которой сообщит о своем изменении статуса и о том, как ее зовут. А в самом классе панели останется только массив непосредственно кнопок MySuperButton, функция инициализации кнопок, пара-тройка обработчиков слушателей и еще кое-что по мелочи.

А по размеру - как ни крути, но когда класс до 200-250 строк, это просто удобно.

Старый 20.12.2010, 18:29
Хомяк вне форума Посмотреть профиль Отправить личное сообщение для Хомяк Найти все сообщения от Хомяк
  № 57  
Ответить с цитированием
Хомяк
[+1 24.11.10]
 
Аватар для Хомяк

Регистрация: Jun 2010
Сообщений: 280
Цитата:
Сообщение от mikhailk Посмотреть сообщение
...
Вы правильно всё поняли. Но интерфейс управления, в данном случае, состоит не только из кнопок, но из самых различных компонентов. Кроме того, задача усложнятся еще и тем, что одни эл-ты управления могут влиять на состояние других эл. управления. И обход значений эл-тов применяется не для того, чтобы выяснить, что и где случилось, а для того чтобы собрать текущие значения и сравнить их с начальными. Поэтому, в принципе, не имеет значение - что и где нажато, а имеет значение то, как изменился, и изменился ли, массив значений (простите за тавтологию ).
__________________
Ведь я только всего и хочу, чтобы все всегда было по-моему...

Старый 20.12.2010, 18:54
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 58  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Помилуй, какой ж это главный класс? Это просто одна из вьюх...
Абсолютно без разницы. Я точно вижу из имен, что все эти кнопки принадлежат разным группам, а собраны в одном месте. Ты приводишь это как пример, что ничего нельзя сделать, нечего делить, а я не соглашаюсь.
Цитата:
Те же яйца, только в профиль.
Нет, если
Код AS3:
_menu = new Menu();
_menu.x = 10, _menu.y = 5;
_screen.addChild(_menu);
_menu.addEventListener(Menu.SELECT, onMenuAction);
вместо десяти подобных блоков для каждой кнопки. Во всяком случае я делаю так; у тебя ситуация может быть другой - но я бы постарался этого избежать. Заодно мне не пришлось бы париться, если эта группа кнопок должна будет плавно появляться на экране)))))
Цитата:
Получается, вроде как, разделение ради разделения, что ли?
Ради улучшения детализации, специализации, инкапсуляции и прочих аций делением отряда на звездочки с назначением старших))
__________________
Reality.getBounds(this);

Старый 20.12.2010, 20:12
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 59  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Сообщение от GAIKER Посмотреть сообщение
Боже упаси
Пачку кнопок собрать в меню, которое само будет следить, куда там нажали и какая галочка в этот момент стояла, и посылать наверх пользовательское событие. В итоге вместо сообщения "юзер кликнул по mc1" будем получать сообщение "юзер хочет перейти к инвентарю".
А я о чем?
Если клик по кнопке переходит к инвентарю, то разницы почти нету.
Код AS3:
clip.addEventListener(Event.CLICK, gotoInventory);
или
Код AS3:
container.addEventListener(GameEvent.INVENTORY_GO, gotoInventory);

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

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

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


 


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


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