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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.11.2013, 17:20
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 81  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
in4core, ну мы поняли что ты сделал поделку которая работает только в твоих сферических условиях и не способна для поддержки сторонними разработчиками. Ну так спрячь это подальше и никому не показывай – здесь нечем хвалится: ни кодом, ни подходом, ни конечным продуктом.

Старый 14.11.2013, 16:44
a7s1h1 вне форума Посмотреть профиль Отправить личное сообщение для a7s1h1 Найти все сообщения от a7s1h1
  № 82  
Ответить с цитированием
a7s1h1

Регистрация: Oct 2013
Сообщений: 126
Тут ещё в самом начале было заявлено как аксиома, что ребёнок не должен обращаться к родителю. Но если, допустим, в определённый момент объект должен удалить себя из родителя, то в любом случае прийдётся к нему обращаться, если и не напрямую, то через собственное событие, которое будет слушать родитель. Но вместо того, чтобы специально для этого создавать специальное событие, распространять его из ребёнка и ловить в родителе, не лучше ли просто перед любым обращением к родителю проверять его наличие?
Код AS3:
if (parent) {
	parent.removeChild(this)
};

Старый 14.11.2013, 16:50
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 83  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
в определённый момент объект должен удалить себя из родителя,
Ошибка закралась на этапе постановки задачи.
Ребенок НЕ ДОЛЖЕН удалять себя из родителя.
И если вдруг, по каким-то неведомым причинам (которых я не могу найти для этой ситуации, кроме как Венера попала в созвездие водолея или прилетели инопланетные поработители и помутили разум творящего сие добро), ребенок вдруг оказался должен это сделать. То возвращаемся к предыдущему пункту, соглашаемся с тем что ребенок ничего не должен, и ищем проблему выше.

А создавать специальных ивент не нужно. Всё, что нужно, это:
Код AS3:
dispatchEvent(new Event(READY_FOR_DELETION));
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Oct 2013
Сообщений: 126
Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
И если вдруг, по каким-то неведомым причинам ... ребенок вдруг оказался должен это сделать.
Ситуация следующая: появляется объект, постепенно за счёт изменения alpha "тает". Полностью растаяв, он должен исчезнуть.
Изменение alpha - в public function update(), которая каждый кадр вызывается из родителя.

Цитата:
Сообщение от Dukobpa3 Посмотреть сообщение
А создавать специальных ивент не нужно. Всё, что нужно, это:
Код AS3:
dispatchEvent(new Event(READY_FOR_DELETION));
Разве есть такое встроенное событие? Я не нашёл.
Таким образом, выходит, что вместо короткого
Код AS3:
parent.removeChild(this)
в ребёнке, нужно будет создавать специальный класс для событий (событий детей этого родителя, например), из ребёнка распространять событие "папа, я умер", а в родителе слушать это событие, чтобы отреагировать и "убрать бездыханное тело" (прошу прощения за мрачные метафоры). "Так длиннее, но правильней?"

А заодно подскажите, пожалуйста, как удалить родителем ребёнка, занесённого в массив? Мучался с for (var i in array), но ничего не вышло.

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Понимаете ли вы разницу между строковой константой и новым событием?
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
А заодно подскажите, пожалуйста, как удалить родителем ребёнка, занесённого в массив?
Всё очень просто - не нужно лирики, нужно уточнять.
Код AS3:
dispatchEvent(new Event(READY_FOR_DELETION));
Эта строчка не обязывает создавать не какие классы, она говорит лишь о том, что Вам необходимо почитать про события, так как Вы не знаете основ. А удалять ребёнка можно как event.target поймав событие.

Старый 14.11.2013, 17:49
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 87  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
«Нельзя затравить Мёртвого Лисёнка», холст-масло, Огюст Ренуар, 1884 ))))

***

А насчет удаления чилдренов, есть еще один вариант.
Допустим есть Parent, и у него Child1 и Сhild2. Нужно по событию в Child2 удалить Child1 из DisplayList.

Тогда можно завести отдельный класс и в его статическую функцию передать ссылки на экземпляры Parent и Сhild1, в которой будет parent.removeChild(child1).
Такой подход тоже работает, проверено на практике. Побочных эффектов замечено не было.

Судя по камментам из других тредов - этот подход менее правильный и грамотный, чем создание кастомного события.
Однако почему это так плохо - мне неизвестно. Может быть тогда больше проблем с GC.

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Это плохо, потому что нарушает один из главных принципов ООП - инкапсуляцию.
Так как этих принципов всего три: инкапсуляция, наследование, полиморфизм - то нарушить один из них == пересрать треть всех понятий ООП.

Три пункта запомнить и выполнять не сложно. Это понятие дисциплины, а никаких не понятий архитектуры или подходов к разработке.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

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

Старый 14.11.2013, 18:01
a7s1h1 вне форума Посмотреть профиль Отправить личное сообщение для a7s1h1 Найти все сообщения от a7s1h1
  № 90  
Ответить с цитированием
a7s1h1

Регистрация: Oct 2013
Сообщений: 126
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Эта строчка не обязывает создавать не какие классы, она говорит лишь о том, что Вам необходимо почитать про события, так как Вы не знаете основ. А удалять ребёнка можно как event.target поймав событие.
Читал, читал, ничего не вычитал(( С обычным событием у меня ничего не вышло, как ни пробовал.
Но у меня есть специальный класс для собственных событий - MyEvent:
Код AS3:
// класс для собственных событий
package RC {
 
	import flash.events.Event
 
	public class MyEvent extends Event{
 
		public var score:int; 
		public var tar:uint; 
		public static const GAME_OVER:String='GAME_OVER';
		public static const GAME_START:String = 'GAME_START';
		public static const BACK_TO_MENU:String = 'BACK_TO_MENU';
		public static const TRANSITION:String='TRANSITION';
 
		// CONSTRUCTOR (type)
		public function MyEvent(type:String, t:uint = 0, s:uint = 0) {
			super(type)
			tar = t;
			score = s;
		};
	};
};
C помощью него без труда передам событие от ребёнка к родителю. Просто хотел узнать, лучший ли это путь. Ну, я так понял, что лучший. Буду манипулировать детьми через события.
Всем спасибо большое за советы!

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

Теги
видимость , классы , композиция , методы , свойства

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

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


 


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


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