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

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

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

Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
По умолчанию Передача или чтение парамера экземпляра класса

Есть ClassA потомок Sprite. В одном из методов этого класса создаётся экземпляр ClassB, тоже потомок Sprite. Оба класса представляют собой интерфейс пользователя. Теперь сам вопрос. Ширина ClassB зависит от ширины ClassA. Ширину ClassB предлагается задать одним и 2-х способов.
1) Передать размеры в конструкторе ClassB.
2) В классе ClassA объявить публичные статические переменные, и в ClassB импортировать ClassA и считывать эти свойства (например: w = ClassA.wi).
Мне кажется 2-ой способ какой-то неправильный...
Как лучше/правильнее поступить?

Старый 18.11.2009, 17:01
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 2  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Ширина экземпляра ClassB зависит от ширины экземпляра ClassA.
экземпляр ClassB должен иметь ссылку на экземпляр СlassA
__________________
Отряд Котовскага

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

Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
а тогда просто к parent экземпляра ClassB обратится не проще?

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

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Если вы будете уверены, что у вас всегда parent - это ClassA, то можно и через него. Но если все же придется когда-нибудь что-нибудь переделывать в архитектуре, то лучше передавать ссылку отдельно, тогда будет все равно, кто там parent.

Старый 18.11.2009, 18:47
Cybo вне форума Посмотреть профиль Отправить личное сообщение для Cybo Найти все сообщения от Cybo
  № 5  
Ответить с цитированием
Cybo

Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
понятно. спасибо.

Старый 18.11.2009, 20:06
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 6  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Лучше не иметь ссылку в явном виде, а подписываться на событие.
То есть:
  1. экземпляр ClassA при изменении своего размера высылает событие Event.RESIZE.
  2. при создании экземпляра ClassB мы подписываем его на это событие экземпляра ClassA.
  3. при получении события экземпляр ClassB обновляет свою ширину в соответствии с (event.target as ClassA).width.

Старый 19.11.2009, 00:12
Cybo вне форума Посмотреть профиль Отправить личное сообщение для Cybo Найти все сообщения от Cybo
  № 7  
Ответить с цитированием
Cybo

Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
т.е. при удалении ClassB нужно будет подчищать подписку? Хотя подписываться и очищать подписку можно в самом ClassB, только ему опять же нужно передавать ссылку на ClassA. А не слишком ли геморно получается?

Старый 19.11.2009, 01:08
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 8  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Удалять подписку можно из того места, где происходит удаление экземпляра ClassB. Можно сделать это и автоматически, но тогда, как вы сказали, придётся сохранять ссылку на экземпляр ClassA. Как мне кажется, ничего особо плохого в этом нет, если ссылка будет использоваться только для удаления подписки.

Однако, в случае сохранения ссылки, нужно учесть, что при удалении экземпляра ClassA ссылка на него в экземпляре ClassB должна быть занулена. Узнать момент удаления можно, например, путём посылки из экземпляра CLassA события удаления. Это в том случае, если предполагается удалять экземпляр ClassA.

Вопрос номер 2: как вы, без использования событий, будете узнавать, что ширина экземпляра ClassA изменилась?

Вариант только один: хранить в нём ссылку на экземпляр ClassB и вызывать при изменении своей ширины какой-то метод этого экземпляра. Не находите это немного некрасивым? А если есть ещё третий, четвертый и т.д. экземпляры ClassB? Не забывайте также, что при удалении экземпляров ClassB ссылки на них нужно занулять. Вот здесь, по-моему, как раз и начинается настоящий гемор

Добавлено через 2 минуты
А, да, есть ещё один вариант: в экземпляре ClassB повесить на этерфрейм (или таймер) обработчик, который будет сравнивать ширину экземпляра ClassA со своей, и, в случае несовпадения, обновлять свою ширину. Этот метод для настоящих извращенцев


Последний раз редактировалось SamFR; 19.11.2009 в 01:24.
Старый 19.11.2009, 10:32
Cybo вне форума Посмотреть профиль Отправить личное сообщение для Cybo Найти все сообщения от Cybo
  № 9  
Ответить с цитированием
Cybo

Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
Хм... действитель, экземпляров ClassB может быть много. Спасибо!

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

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

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


 


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


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