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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.11.2012, 18:37
needForAnswer вне форума Посмотреть профиль Отправить личное сообщение для needForAnswer Найти все сообщения от needForAnswer
  № 11  
Ответить с цитированием
needForAnswer
 
Аватар для needForAnswer

Регистрация: Apr 2010
Адрес: Санкт-Петербург
Сообщений: 44
Спасибо, это работает!
Но, как я понимаю, такой конструкции лучше избегать при написании программ?

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

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

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

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
преобразование типов - нормальная практика, например при прослушивании события функции обработчику известно, что его сгенерировал класс-потомок EventDispatcher, и чтобы избежать лишних ошибок, нужно его преобразовать к классу или интерфейсу того экзкмпляра, к которому подписывались. Единственное чего стоит избегать - это прямое обрщение к классам-ролителям, как говорилось ранее. Любое обратное взаимодействие от класса-потомка осуществляется только через события, а родитель уже решает как реагировать и реагировать ли вообще.
__________________
ответ прост: be || !be == true

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

Регистрация: Apr 2010
Адрес: Санкт-Петербург
Сообщений: 44
Подскажите, каким образом перестроить архитектуру того, что есть:

1) Класс А, создающий потомков класса Б и присваивающий им определенный параметр П
2) Класс Б, в котором прописано событие MouseEvent.CLICK, вызывающее метод М

Нужно, чтобы Класс А знал, когда и в каком в экземпляре Б вызывается метод М и какой у него параметр П.

Добавлено через 30 минут
Перенес описание события MouseEvent.CLICK из класса Б в класс А.
Задача решена, но я думаю, что это не лучший вариант размещать этот код в основном классе.

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

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
как раз наоборот, в данном случае лучше, плюс ко всему в вашем случае функция слушатель можно сделать один всего, особенно если использовать приведение типов:
Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
 
	public class A extends MovieClip 
	{
		var arB:Array //Массив для объектов B
		public function A():void 
		{
			arB = new Array();
			for (var i:int = 0; i < 10; i++) 
			{
				var b :B		= new B(i);
				b.mouseChildren	= false;//отключаем потомков мыши 
				b.buttonMode	= true;//делаем кнопкой
				addChild(b)
				b.x = i * 50;
				stage.addEventListener(MouseEvent.CLICK, mouseClickHandler);//слушаем клик по сцене
				arB.push(b)
			}
		}
 
		private function mouseClickHandler(e:MouseEvent):void 
		{
			var target = e.target as B;//приводим к типу B
			if (target)//если попали по B
			{
				var index :int = arB.indexOf(target);//ищем объект в массиве
				if (index != -1)
				{
					target.m();
					trace(target.p);
				}
			}
			else//если промахнулись, то target будет равен null, т.к. привести к типу не удалось
			{
				trace("промах");
			}
		}
	}
}
Класс B в описательном плене ничего интересного и сложного не представляет
__________________
ответ прост: be || !be == true

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

Регистрация: Jul 2008
Сообщений: 912
Зачем тебе обращаться к переменной родителя?
Возьми передай эту переменную ребёнку когда тебе нужно, через set метод ребёнка.

Старый 13.11.2012, 10:54
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 17  
Ответить с цитированием
Frost47rus
[+4 08.09.13]

Регистрация: May 2012
Сообщений: 131
Код AS3:
public class A{
private var some:SomeClass;
public function A{
some = ...;
var b:B = new B(some);
}
}
или тогда уж синглтон

Код AS3:
public class A{
private static var _inst:A;
public var some:SomeClass;
public static function instance():A{
if (_inst == null){
_inst = new A();
}
return _inst;
}
public function A(){
some = ...;
}
}
тогда в классе B да и вообще в любом классе var some:SomeClass = A.instance().some;

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

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

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


 


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


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