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

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

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
Цитата:
Сообщение от undefined Посмотреть сообщение
так, а зачем ее сначала в true выставлять,и тут же в false?
дык я ж написал. Чтобы нельзя было создать инстанс извне
__________________
while(live()) { hope(); }

Старый 27.11.2017, 18:40
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 22  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
ну так сам факт, что в _instance что-то сидит достаточно чтоб кидать ошибку.Зачем флаги еще какие-то?

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
Цитата:
Сообщение от Appleman Посмотреть сообщение
ZergMaster, а в чём преимущество такого метода - вешать слушатель на весь слой, перед навешиванием слушателей непосредственно на регистрируемые объекты?
в данном случае реализуется "баблинг" событий. Единожды добавляем на контейнер слушатели OVER и OUT, чтобы не создавать бесчисленное множество слушателей (ведь объектов с всплывающей подсказкой может быть очень много). Всякий раз, как событие срабатывает, проверяем, не идентичен ли target одному из объектов, которые мы зарегали в бабл-коллекции. Если да, то тут уже добавляем MOVE слушатель, чтобы двигать за мышкой подсказку. Когда же происходит OUT - слушатель удаляется. Таким образом, на все про все используется два постоянных и один временный слушатель (независимо от количества зарегестрированных на подсказку объектов).

Добавлено через 2 минуты
Цитата:
Сообщение от undefined Посмотреть сообщение
так, а зачем ее сначала в true выставлять,и тут же в false?
обычно делают так:
Код AS3:
private var _instance:MySingleton;
private function MySingleton() {
...
}
public static function getInstance():MySingleton {
    if (!_instance) _instance=new MySingleton();
    return _instance;
}
и никакие флаги не нужны
все потому, что, как я уже писал, мы не можем в as3 сделать приватным конструктор. То есть
Код AS3:
private function MySingleton() {
...
}
не получится.
Соответственно, флаг обеспечивает невозможность сделать где-нибудь в коде
Код AS3:
var mySingleton = new MySingleton()
__________________
while(live()) { hope(); }

Старый 27.11.2017, 18:51
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 24  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
а блин, это я с жавой попутал)
но все равно наличие флага избыточно.

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от ZergMaster Посмотреть сообщение
в данном случае реализуется "баблинг" событий. Единожды добавляем на контейнер слушатели OVER и OUT, чтобы не создавать бесчисленное множество слушателей (ведь объектов с всплывающей подсказкой может быть очень много). Всякий раз, как событие срабатывает, проверяем, не идентичен ли target одному из объектов, которые мы зарегали в бабл-коллекции. Если да, то тут уже добавляем MOVE слушатель, чтобы двигать за мышкой подсказку. Когда же происходит OUT - слушатель удаляется. Таким образом, на все про все используется два постоянных и один временный слушатель.
Ясно. А что с прекращением регистрации объектов? Насколько я понимаю, с одной стороны, при таком подходе никакие приёмники событий не "зависнут", и мы можем даже не делать "unregister" для добавленных объектов. У тебя даже такого метода в классе нет. С другой стороны, что будет происходить, если мы, например, захотим выводить численное значение какого-то параметра при наведении мышки на его шкалу? Мне кажется, твой класс не справится с такой задачей, т.к. description для графического объекта (собственно шкалы) он получил в момент её регистрации, и его уже будет не обновить.

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
undefined
защита от дурака имеет место быть в Enterprise проектах.
Я согласен, что можно и так. Но, повторюсь, в этом случае предпочту ограничить доступ, если возможно. Для порядку.

Добавлено через 4 минуты
Appleman
Этот класс очень легко модифицировать под такие нужды. какой-нибудь метод в стиле
Код AS3:
public function setDescription(object:Object, description:String):void 
{
_bubbleObjects[object].description = description;
}
__________________
while(live()) { hope(); }

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от ZergMaster Посмотреть сообщение
Этот класс очень легко модифицировать под такие нужды. какой-нибудь метод в стиле
Согласен. Но всё-таки не будет ли проблемой отсутствие метода прекращения регистрации объектов и их изъятия из перечня отслеживаемых? Раздувание Dictionary....

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от ZergMaster Посмотреть сообщение
пожалуй! Хотя кем жеж это надо быть, чтобы изнутри этого класса пытаться создавать множество инстансов)) Эдак себя бить себя по рукам постоянно надо. )
А извне то все равно больше одного не создашь.
Да почему изнутри то? Я же написал как можно создать сколько угодно таких экземлпяров. И сделал это извне. Сначала вызывается MySinglton.instance; Этот вызов ставит флаг isConstructring в true, а дальше создавай как обычные экземпляры его сколько угодно, он уже не синглтон
Туплю. Я не обратил внимание, что там флаг снова ставится в false сразу же после создания.
Да, способ хороший.
п.с. Малость офтоп, но мне нравится реализация синглтона в C# в Unity
Код AS3:
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
	private static T _instance;
 
	private static object _lockObject = new object();
 
	public static T Instance {
		get {
			if (applicationIsQuitting) {
				return null;
			}
 
			lock(_lockObject)
			{
				if (_instance == null) {
					_instance = (T) FindObjectOfType(typeof(T));
 
					if ( FindObjectsOfType(typeof(T)).Length > 1 ) {
						return _instance;
					}
 
					if (_instance == null) {
						GameObject singleton = new GameObject();
						_instance = singleton.AddComponent<T>();
						singleton.name = "(singleton) "+ typeof(T).ToString();
						DontDestroyOnLoad(singleton);
					} 
				}
 
				return _instance;
			}
		}
	}
 
	private static bool applicationIsQuitting = false;
 
	public void OnDestroy () {
		applicationIsQuitting = true;
	}
}
А дальше по этому шаблону создаем сколько угодно разных синглтонов всего лишь создав такой класс
Код AS3:
using UnityEngine;
 
public class SomeSinglton: Singleton<SoundManager> {
 
}
И можно уже обращаться к нему
Код AS3:
SomeSinglton.Instance;
Очень удобная штука, и мне ее катастрофически нехватает в as3 теперь)
__________________
Ко мне можно и нужно обращаться на ты)

Старый 27.11.2017, 22:39
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 29  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
Цитата:
Сообщение от Appleman Посмотреть сообщение
Согласен. Но всё-таки не будет ли проблемой отсутствие метода прекращения регистрации объектов и их изъятия из перечня отслеживаемых? Раздувание Dictionary....
не очень понял, в чем тут проблема?
Код AS3:
delete _bubbleObjects[object]
__________________
while(live()) { hope(); }

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от ZergMaster Посмотреть сообщение
не очень понял, в чем тут проблема?
Код AS3:
delete _bubbleObjects[object]
В исходном коде не было (или я не заметил ). Я и спросил.

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

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

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


 


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


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