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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.10.2013, 17:03
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 11  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
А если кнопок будет много ( как например калькулятор ) это Вы предлагаете для каждой писать слушателя, в место наследования от класса у которого всё уже прописано? я не согласен.

Старый 22.10.2013, 17:07
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 12  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Ну так вы же в итоге всё равно подписываетесь, только на другое событие.
Цитата:
А если кнопок будет много
Опять же от задачи зависит. Если надо будет, то для каждой пропишу =)

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

Регистрация: Mar 2013
Сообщений: 1,864
udaaff Спасибо за обьяснения!
Хотя ещё можно и destroy сразу вызывать.
Код AS3:
package 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite
	{
		public function Main() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			new AppConfig(this);
		}
	}
 
}
Код AS3:
package 
{
	import flash.display.DisplayObjectContainer;
 
	public class AppConfig
	{
		private var _doc:DisplayObjectContainer;
		private var _view:MainView;
 
		public function AppConfig(doc:DisplayObjectContainer) 
		{
			//сохраняем ссылку на DisplayObjectContainer
			_doc = doc;
			//создаём главный класс отображения
			_view = new MainView();
			//добавляем его в DisplayObjectContainer
			_doc.addChild(_view);
		}
 
	}
 
}
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	public class MainView extends Sprite
	{
		private var _button:Button;
		private const DESTROY:uint = 0xA7A7A7;
 
		public function MainView() 
		{
			_button = new Button();
			_button.addEventListener(MouseEvent.MOUSE_DOWN, button_mouseDownHandler);
			_button.id = DESTROY;
			_button.x = _button.y = 100;
			this.addChild(_button);
		}
 
		private function button_mouseDownHandler(event:MouseEvent):void 
		{
			if (event.target.id == DESTROY) this.destroy();
		}
		private function destroy():void
		{
			super.removeChildren();
		}
 
	}
 
}
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Button extends Sprite 
	{
		private var _id:uint;
 
		public function Button() 
		{
			super();
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(event:Event=null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			super.graphics.beginFill(0x000000);
			super.graphics.drawRect(0, 0, 70, 45);
			super.graphics.endFill();
		}
 
		public function get id():uint 
		{
			return _id;
		}
 
		public function set id(value:uint):void 
		{
			_id = value;
		}
 
	}
 
}

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

Регистрация: Mar 2013
Сообщений: 290
Wolsh, ясно, значит обращение вверх по иерархии вообще ересь, и нужно менять архитектуру.

Akopalipsis, о как интересно, благодарю за пример. Чуть позже попробую протестировать, но уже при беглом осмотре имеется пара вопросов.
Но пока только хотел спросить, а что это за подход такой с MainView, почему вы его в диалоге с udaff использовали как отдельный термин?
Это часть какого-то Паттерна? Может у вас тут вообще MVC реализовано.

Старый 22.10.2013, 18:02
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 15  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Обращение вверх по иерархии не ересь. Допустим если у вас одинаковое содержимое в разных контейнерах. Я для этих целей использую сами знаете что.

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

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Это часть какого-то Паттерна?
Проще всего представить это как диафильм. Есть класс, который отвечает только за
отображение, он создаёт и обрабатывает только визуальные обьекты.
Когда мне в первые показали такой вариант, то я его боялся и не использовал очень долго.
Но сейчас я не даже представить не могу, что буду использовать другую реализацию.
Цитата:
Я для этих целей использую сами знаете что.
Сигналы?)

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
if (event.target.id == DESTROY) this.destroy();
Не надо target. id это свойство Button. Вы же подписывались на событие от _button, а это .currentTarget
Мало того, если _button член класса, как в данном коде, id вообще не нужен.
Код AS3:
if (event.currentTarget == _button) this.destroy();
И не заводите привычку подписывать кнопки на даун. Только клик. Юзер должен иметь возможность передумать.
__________________
Reality.getBounds(this);

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

Регистрация: Mar 2013
Сообщений: 1,864
Вот я и говорю, что destroy можно сделать слушателем.

Старый 22.10.2013, 20:20
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 19  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
У меня есть dict[node.@id]=class

Старый 23.10.2013, 00:19
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 20  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Akopalipsis, разбираю ваш пример, идея прикольная, но и вопросов много )


1.
Код AS3:
private function init(e:Event = null):void
Зачем здесь прописывать дефолтный null, это чем то лучше, чем оставить просто e:Event?
А разве по умолчанию оно и не будет равно null? Или тут есть какой-то ньюанс...


2.
Код AS3:
new AppConfig(this);
Как доступно для нуба озвучить смысл сего оператора?
Я понимаю его так: Создать экземпляр класса AppConfig и передать ему экземпляр класса Main.
Правильно ли это? И кстати, это пример Композиции? Видимо это пример "Недокомпозиции", так сказать...
Ведь мы этот оператор не присваиваем никакой переменной, то есть экземпляр завис в воздухе.


3.
Код AS3:
_doc.addChild(_view);
Правильно ли я понимаю, что по сути мы сейчас добавили экземпляр класса MainView в экземпляр класса Main?
И именно для этого писали new AppConfig(this); то есть передача через конструктор обязательна. И по другому нельзя.


4.
Код AS3:
private var _button:Button;
Сначала я было подумал, что мы будем юзать некий системный класс Button, потому что это слово подсвечивается.
Однако потом увидел, что ваш четвертый класс имеет такое же имя... Это смущает.
То есть, выходит, создав свой класс Button мы как бы оттенили системный класс с таким же именем.
Этакий классовый оверрайд?


5.
Код AS3:
_button.id = DESTROY;
А вот этот .id - это что за свойство, оно же не было ранее объявлено нигде.
Или это какой-то трюк, типа, мы можем налету присобачить к экземпляру любые свойства?


6.
Код AS3:
this.destroy();
Хм, как-то цельное понимание не складывается. То есть мы сделали следующее:
Применили к текущему экземпляру класса MainView метод destroy, который обратился к экземпляру класса выше
(то есть super. это ссылка на Main, ведь так?), и удалил всех его детей. Выходит, это всё равносильно записи: this.super.removeChildren();


7.
Код AS3:
public function Button() 
		{
			super();									
 
			//...
 
		}
Не понимаю, что здесь делает super(); Он вызывает конструктор системного класса Sprite, но... что это дает?
Это равносильно записи new Sprite(); так чтоли? Но даже если так, то экземпляр завис в воздухе, и мы его потеряли.
Тогда "... зачем ей все шелка?" (с)


8. Функции get и set, в связке со свойством _id, они несут какую-то функциональность в данном примере?
Похоже что нет... Видимо добавлены для "цельности концепций", поправьте, если это не так.


9. Вы проверяли этот проект на работоспособность? А то при запуске я получаю одну ошибку:
Цитата:
1061: Call to a possibly undefined method removeChildren through
a reference with static type flash.display:Sprite. super.removeChildren();

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

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

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

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


 


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


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