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

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

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

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

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

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Код AS3:
(e.target as Button).action();
что мешает в САМОЙ кнопке сделать
Код AS3:
addEventListener(MouseEvent.CLICK, action)
Если у вас сама кнопка решает что ей делать.
__________________
Отряд Котовскага

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Самый красивый довод – про моментальное отключение всех кнопок удалением одного слушателя – зиждется на Вашем слабом знании Событийной модели. Я не знаю, кто Вас научил таким ужасным костылям – накрывать спрайтом, пробегаться по массивам. Есть простой кошерный метод stopPropagation(). В любой момент Вы можете полностью отрубить любому контейнеру захват мыши, и все его обитатели станут глухими.
Надеюсь, концепция что все обитатели должны сидеть в контейнере, а не разгуливать по стейджу, у Вас не вызывает возражений? Тогда пример:
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	/**
	 * ...
	 * @author wolsh
	 */
	public class Main extends Sprite 
	{
		private var _sprite:Sprite;
		private var _modalSprite:Sprite;
		private var _container:Sprite;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			_container = new Sprite();
			addChild(_container);
			//// В контейнер поместим "кнопку", одну из 128 тысяч.
			_sprite = new Sprite();
			_sprite.graphics.beginFill(0x000000);
			_sprite.graphics.drawRect(0, 0, 150, 100);
			_sprite.x = _sprite.y = 150;
			_sprite.name = "DISABLED";
 
			_container.addChild(_sprite);
 
			//// А это якобы модальное окно, которое будет оставаться активным,
			//// когда контейнер заглохнет.
			_modalSprite = new Sprite();
			_modalSprite.graphics.beginFill(0x008844);
			_modalSprite.graphics.drawRect(0, 0, 100, 50);
			addChild(_modalSprite);
			_modalSprite.x = _modalSprite.y = 120;
			_modalSprite.name = "MODAL";
 
			//// Вешаем слушателей. Для наглядности я сделал один хендлер
			//// и для спрайта в контейнере и для модального окна. Это не важно))
			_modalSprite.addEventListener(MouseEvent.CLICK, clickHandler);
			_sprite.addEventListener(MouseEvent.CLICK, clickHandler);
 
			//// Внезапно: Отключаем захват клика для контейнера и всех его 128 тысяч кнопок.
			//// _sprite с этого момента не получает события клика.
			_container.addEventListener(MouseEvent.CLICK, clickStopper, true);
		}
 
		private function clickStopper(event:MouseEvent):void 
		{
			event.stopPropagation();
		}
 
		private function clickHandler(event:MouseEvent):void 
		{
			var s:Sprite = event.target as Sprite;
			if (s != null) trace("Clicked", s.name);
		}
	}
}
Добавлено через 6 минут
Ну и не забываем про старый добрый
Код AS3:
_container.mouseChildren = false;
Добавлено через 14 минут
Котяра, хитрость в том что кнопка не решает, а только хранит колбэк. Если бы решала, был бы полный атас. А так сохраняется видимость контроля за происходящим – после клика только Сам Главный решает, вызывать колбэк или нет. Ну и опять же, озвученный выше довод про моментальное отключение/включение всех кнопок. Если они будут "нажиматься" сами, то автор видит лишь два костыля как остановить это.
__________________
Reality.getBounds(this);

Старый 13.03.2012, 03:44
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 24  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
я уже давно сделал правильно и у меня всё работает без единого костыля... ваши доводы в пользу использования тысячи слушателей событий противоречат рекомендациям коллина мука. Я привел страницы где черным по белому написано что я прав, а вы нет.

Добавлено через 5 минут
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Самый красивый довод – про моментальное отключение всех кнопок удалением одного слушателя – зиждется на Вашем слабом знании Событийной модели. Я не знаю, кто Вас научил таким ужасным костылям – накрывать спрайтом, пробегаться по массивам. Есть простой кошерный метод stopPropagation(). В любой момент Вы можете полностью отрубить любому контейнеру захват мыши, и все его обитатели станут глухими.
Надеюсь, концепция что все обитатели должны сидеть в контейнере, а не разгуливать по стейджу, у Вас не вызывает возражений? Тогда пример:
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	/**
	 * ...
	 * @author wolsh
	 */
	public class Main extends Sprite 
	{
		private var _sprite:Sprite;
		private var _modalSprite:Sprite;
		private var _container:Sprite;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			_container = new Sprite();
			addChild(_container);
			//// В контейнер поместим "кнопку", одну из 128 тысяч.
			_sprite = new Sprite();
			_sprite.graphics.beginFill(0x000000);
			_sprite.graphics.drawRect(0, 0, 150, 100);
			_sprite.x = _sprite.y = 150;
			_sprite.name = "DISABLED";
 
			_container.addChild(_sprite);
 
			//// А это якобы модальное окно, которое будет оставаться активным,
			//// когда контейнер заглохнет.
			_modalSprite = new Sprite();
			_modalSprite.graphics.beginFill(0x008844);
			_modalSprite.graphics.drawRect(0, 0, 100, 50);
			addChild(_modalSprite);
			_modalSprite.x = _modalSprite.y = 120;
			_modalSprite.name = "MODAL";
 
			//// Вешаем слушателей. Для наглядности я сделал один хендлер
			//// и для спрайта в контейнере и для модального окна. Это не важно))
			_modalSprite.addEventListener(MouseEvent.CLICK, clickHandler);
			_sprite.addEventListener(MouseEvent.CLICK, clickHandler);
 
			//// Внезапно: Отключаем захват клика для контейнера и всех его 128 тысяч кнопок.
			//// _sprite с этого момента не получает события клика.
			_container.addEventListener(MouseEvent.CLICK, clickStopper, true);
		}
 
		private function clickStopper(event:MouseEvent):void 
		{
			event.stopPropagation();
		}
 
		private function clickHandler(event:MouseEvent):void 
		{
			var s:Sprite = event.target as Sprite;
			if (s != null) trace("Clicked", s.name);
		}
	}
}
Добавлено через 6 минут
Ну и не забываем про старый добрый
Код AS3:
_container.mouseChildren = false;
Добавлено через 14 минут
Котяра, хитрость в том что кнопка не решает, а только хранит колбэк. Если бы решала, был бы полный атас. А так сохраняется видимость контроля за происходящим – после клика только Сам Главный решает, вызывать колбэк или нет. Ну и опять же, озвученный выше довод про моментальное отключение/включение всех кнопок. Если они будут "нажиматься" сами, то автор видит лишь два костыля как остановить это.
Знаю плохо, зато делаю правильно, что имхо намного важнее.. не знаю как для кого конечно, может для вас важнее использовать какой-то редкий супер костыль в кривом коде, но я перед собой такой задачи не ставлю

Добавлено через 8 минут
Цитата:
Сообщение от Котяра Посмотреть сообщение
Код AS3:
(e.target as Button).action();
что мешает в САМОЙ кнопке сделать
Код AS3:
addEventListener(MouseEvent.CLICK, action)
Если у вас сама кнопка решает что ей делать.
мешает то что профессионалы считают этот подход не правильным и нубским, я же объяснил уже выше

Добавлено через 10 минут
Цитата:
Сообщение от Zebestov Посмотреть сообщение
Что еще должна делать кнопка, кроме как предоставить возможность нажать себя и крикнуть об этом наверх?
это шутка или не? я не уловил что-то

Старый 13.03.2012, 04:00
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 25  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Цитата:
я только что ради интереса открыл книжку мука и в ней написано что вы не правы на странице 564
Сократ не любил книги, т.к. с ними не получалось диалога
И да, Мук не забор, но все же...
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Оффтоп: не надо цитировать кучу.
Если хотите ответить - просто отвечайте.
Либо конкретику цитируйте. Всем и так понятно что вы отвечаете на вышестоящие топики.

По теме: почитайте про паттерны, ну и про MVC.
Здесь на форуме много. Потом приходите.
__________________
Отряд Котовскага

Старый 13.03.2012, 04:29
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 27  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
Цитата:
Сообщение от Котяра Посмотреть сообщение
Оффтоп: не надо цитировать кучу.
Если хотите ответить - просто отвечайте.
Либо конкретику цитируйте. Всем и так понятно что вы отвечаете на вышестоящие топики.

По теме: почитайте про паттерны, ну и про MVC.
Здесь на форуме много. Потом приходите.
Пролистал про MVC, в очередной раз убедился что я прав...

Старый 13.03.2012, 04:32
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 28  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от anmelegov Посмотреть сообщение
Пролистал про MVC, в очередной раз убедился что я прав...
Я думаю вам пора уже свою книгу писать. Ну там делиться опытом. Свои паттерны придумать. Сейчас такая разруха: все не так, везде все не правы и пишут слишком много кода.

Старый 13.03.2012, 04:34
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 29  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от anmelegov Посмотреть сообщение
это шутка или не? я не уловил что-то
Не шутка. Для кнопки слишком функционально. Было бы странно открыть капот автомобиля — а там пусто! Ну точно — вся механика спрятана в замке зажигания!!!

Цитата:
Сообщение от anmelegov Посмотреть сообщение
создавать слушатель событий для каждой кнопки это по индийски
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Ну да, switch-case на 128 кнопок куда круче
Цитата:
Сообщение от anmelegov Посмотреть сообщение
тысячи слушателей
Здесь не аукцион вроде

Добавлено через 2 минуты
Цитата:
Сообщение от anmelegov Посмотреть сообщение
Пролистал про MVC, в очередной раз убедился что я прав...
Но Bgg не про этот MVC говорил!
__________________
Поймай яблоко 2!

Старый 13.03.2012, 04:55
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 30  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
Цитата:
Сообщение от Bgg Посмотреть сообщение
Я думаю вам пора уже свою книгу писать. Ну там делиться опытом. Свои паттерны придумать. Сейчас такая разруха: все не так, везде все не правы и пишут слишком много кода.
пока еще рановато.. может через год-два

Добавлено через 2 минуты
Цитата:
Сообщение от Zebestov Посмотреть сообщение
Не шутка. Для кнопки слишком функционально. Было бы странно открыть капот автомобиля — а там пусто! Ну точно — вся механика спрятана в замке зажигания!!!
Готов выслушать ваши предложения

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

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

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


 


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


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