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

Вернуться   Форум Flasher.ru > Блоги > 3p.station

Оценить эту запись

Спиннер. Кому лень писать.

Запись от 3p.station размещена 12.06.2013 в 08:24
Обновил(-а) 3p.station 16.06.2013 в 17:21

Выкладываю спиннер - www.flashstudio.com.ua/spinner
Писался для тачскрин(колесо мышки не юзается).
Несложно кустомизируется, использует aze в качестве твиннера.

Код AS3:
package
{
	import aze.motion.eaze;
 
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Rectangle;
 
	public class Spinner extends mcSpinner
	{
 
		private const HEIGHT_OF_NUMBER:uint = 114;
		private const HEIGHT_OF_SPINNER:uint = 570;
		private const MAX_VALUE:uint = 10;
		private const MIDDLE_VALUE:uint = 2;
		private var _isMove:Boolean;
		private var _lastMouseY:Number;
		private var _numbersLine:Sprite;
		private var _currentNumber:int;
		private var _lastEnterFrameMouseY:Number;
		private var _mouseAcceleration:int;
		private var _deltaEazeMove:Number;
 
		public function Spinner()
		{
			super();
			this.tfLabel.text = MIDDLE_VALUE.toString();
			this.tfLabel.mouseEnabled = false;
			this.mouseChildren = false;
			addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		public function init(event:Event):void
		{
			_currentNumber = MIDDLE_VALUE;
			removeEventListener(Event.ADDED_TO_STAGE, init);
			//линк на сцену нужен для уничтожения лиссенеров в том случае если спиннер уже убрали из дисплейлиста
 
			//здесь будут наши числа
			_numbersLine = new Sprite();
			//генерируем намберсы, на один больше чем помещается в спиннере, собственно им мы и будем играть
			//mcNumber это подготовленный мувик в либе
			for (var i:uint = 0; i < (HEIGHT_OF_SPINNER/HEIGHT_OF_NUMBER + 1); i++) 
			{
				var number:mcNumber = new mcNumber();
				//присваиваем число тексту текстового поля в мувике
				number.tfLabel.text = i.toString();
				_numbersLine.addChild(number);
				number.y = i * HEIGHT_OF_NUMBER;
			}
			//добавляем все эти
			this.mcNumbers.addChild(_numbersLine);
 
			//слушаем нажатие и движение по спиннеру
			this.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			this.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
		}
 
		//возвращаем текущее значение нашего спиннера
		//не придумал как отсчитывать при движении количество целых сдвигов, поэтому беру чисто из текстового поля
		//далее будет понятно почему так
		public function getCurrentNumber():uint
		{
			//берем первый намберс в дисплейлисте(это всегда верхний намберс, он может быть как в состоянии -1(спрятан сверху под маской) так и в состоянии 0)
			var firstNumber:mcNumber = _numbersLine.getChildAt(0) as mcNumber;
			var currentNumber:mcNumber;
			if(firstNumber.y < -5)
			{
				//поэтому берем либо "средний" элемент и на один выше
				currentNumber = _numbersLine.getChildAt( MIDDLE_VALUE + 1) as mcNumber;
			}else
			{
				//либо просто средний элемент
				currentNumber = _numbersLine.getChildAt(MIDDLE_VALUE) as mcNumber;
			}
			return int(currentNumber.tfLabel.text)
		}
 
		// INNERTION
		// доводим намберсы до ровных позиций после того как пользователь прокрутил спиннер без иннерции, тоесть медленно и спокойно
		// берем верхний намберс и смотрим выше он середины или нет
		// и доводим на разницу нуля и высоты этого намбера
		private function leadLines():void
		{
			var firstNumber:mcNumber = _numbersLine.getChildAt(0) as mcNumber;
			var currentY:Number = Math.abs(firstNumber.y);
			var i:uint;
			var number:mcNumber;
			if( currentY >= HEIGHT_OF_NUMBER/2 )
			{
				for (i = 0; i < _numbersLine.numChildren; i++) 
				{
					number = _numbersLine.getChildAt(i) as mcNumber;
					eaze(number).to(.3, { y:number.y - HEIGHT_OF_NUMBER + currentY});
				}
				eaze(this).delay(.3).onUpdate(checkNumbersPositions);
				eaze(this.mcLines.mcLine1).to(.3, { y:this.mcLines.mcLine1.y - HEIGHT_OF_NUMBER + currentY}).onUpdate(moveSecondBGLine).onComplete(showLabel);
 
			}else
			{
				for (i = 0; i < _numbersLine.numChildren; i++) 
				{
					number = _numbersLine.getChildAt(i) as mcNumber;
					eaze(number).to(.3, { y:number.y + currentY});
				}
				//во время доводки играем "внешним" намбером
				eaze(this).delay(.3).onUpdate(checkNumbersPositions);
				//в конце довдки, отображаем текущий номер на верхней индикационной плашечке
				eaze(this.mcLines.mcLine1).to(.3, { y:this.mcLines.mcLine1.y + currentY}).onUpdate(moveSecondBGLine).onComplete(showLabel);
			}
		}
 
		//тонкая доводка после иннерционного вращения, когда юзер "запустил" спиннер
		//практически тоже самое что leadLines, но без твиннера так как довдки очень маленькие(пару пикселей)
		private function leadLinesAfetrInnertial():void
		{
			var firstNumber:mcNumber = _numbersLine.getChildAt(0) as mcNumber;
			var currentY:Number = Math.abs(firstNumber.y);
			var i:uint;
			var number:mcNumber;
			if(currentY >= HEIGHT_OF_NUMBER/2)
			{
 
				for (i = 0; i < _numbersLine.numChildren; i++) 
				{
					number = _numbersLine.getChildAt(i) as mcNumber;
					number.y = number.y - HEIGHT_OF_NUMBER + currentY;
				}
				checkNumbersPositions();
				this.mcLines.mcLine1.y = this.mcLines.mcLine1.y - HEIGHT_OF_NUMBER + currentY;
				moveSecondBGLine();
 
			}else
			{
				for (i = 0; i < _numbersLine.numChildren; i++) 
				{
					number = _numbersLine.getChildAt(i) as mcNumber;
					number.y = number.y - currentY;
				}
				checkNumbersPositions();
				this.mcLines.mcLine1.y = this.mcLines.mcLine1.y - currentY;
				moveSecondBGLine();
			}
			showLabel();
		}
 
		//показываем текущее значение спиннера
		private function showLabel():void
		{
			eaze(this.tfLabel).to(.2,{alpha:1});
			eaze(this.mcLabelHolder).to(.2,{alpha:1});
			this.tfLabel.text = getCurrentNumber().toString();
		}
 
		// NUMBERS
		//двигаем намберсы на дельту
		private function moveNumbers(delta:Number):void
		{
			//для каждого намбера задаем твиннер
			for (var i:int = 0; i < _numbersLine.numChildren; i++) 
			{
				var number:mcNumber = _numbersLine.getChildAt(i) as mcNumber;
				number.y -= delta;
			}
			//проверяем когда пора перемещать транзитный намбер
			checkNumbersPositions();
		}
 
		//вот тут сама магия и происходит, _currentNumber отвечает на сколько намберосов произошло смещение.
		//но его нельзя использовать для getCurrentNumber, так как движение может быть не защитанно(если довдка спустила намберы вниз)
		private function checkNumbersPositions():void
		{
			var number:int;
			var lastNumber:mcNumber = _numbersLine.getChildAt(_numbersLine.numChildren - 1) as mcNumber;
			if(lastNumber.y > HEIGHT_OF_SPINNER)
			{
				_currentNumber --;
				if(_currentNumber == -1) _currentNumber = MAX_VALUE;
				lastNumber.y = _numbersLine.getChildAt(0).y - HEIGHT_OF_NUMBER;
				_numbersLine.addChildAt(lastNumber, 0);
				number = _currentNumber - 2;
				if(number < 0)
				{
					number = MAX_VALUE + number + 1;
				}
				lastNumber.tfLabel.text = number.toString();
			}
 
			var firstNumber:mcNumber = _numbersLine.getChildAt(0) as mcNumber;
			if(firstNumber.y < -firstNumber.height)
			{
				_currentNumber ++;
				if(_currentNumber == (MAX_VALUE + 1)) _currentNumber = 0;
				firstNumber.y = _numbersLine.getChildAt(_numbersLine.numChildren - 1).y + HEIGHT_OF_NUMBER;
				_numbersLine.addChildAt(firstNumber, _numbersLine.numChildren - 1);
				number = _currentNumber + 3;
				if(number > MAX_VALUE)
				{
					number = number - MAX_VALUE - 1;
				}
 
				firstNumber.tfLabel.text = number.toString();
			}
		}
 
		// BG LINES
		//в проекте исопльзуется две полоски беграунда которые следуют друг за другом
		//двигаем первую
		private function moveBGLines(mouseDelta:Number):void
		{
			this.mcLines.mcLine1.y -= mouseDelta;
 
			moveSecondBGLine();
		}
 
		//и подстраиваем вторую
		private function moveSecondBGLine():void
		{
			if(this.mcLines.mcLine1.y < 0)
			{
				this.mcLines.mcLine2.y = this.mcLines.mcLine1.y + HEIGHT_OF_SPINNER;
			}
			if(this.mcLines.mcLine1.y > 0)
			{
				this.mcLines.mcLine2.y = this.mcLines.mcLine1.y - HEIGHT_OF_SPINNER;
			}
			checkBGLinesPositions();
		}
 
		//и при необходимости переносим первую полоску вверх или вниз если вторая уже закончилась
		private function checkBGLinesPositions():void
		{
			if(this.mcLines.mcLine1.y < - HEIGHT_OF_SPINNER)
			{
				this.mcLines.mcLine1.y = this.mcLines.mcLine2.y + HEIGHT_OF_SPINNER;
			}
			if(this.mcLines.mcLine1.y >  HEIGHT_OF_SPINNER)
			{
				this.mcLines.mcLine1.y = this.mcLines.mcLine2.y - HEIGHT_OF_SPINNER;
			}
		}
 
		// MOUSE HENDLERS
		//собственно наше движение
		//при началае движения прячем плашку с текущим значением спиннера
		//и смещаем на дельту наши намберсы и полоски бекграунда
		//для поиска дельты используем _lastMouseY и сравниваем с текущим положением мыкурсораи
		protected function onMouseMove(event:MouseEvent):void
		{
			if(!_isMove) return;
			if(this.tfLabel.alpha == 1)eaze(this.tfLabel).to(.2,{alpha:0});
			if(this.mcLabelHolder.alpha == 1)eaze(this.mcLabelHolder).to(.2,{alpha:.9});
			var mouseDelta:Number = _lastMouseY - mouseY;
			moveBGLines(mouseDelta);
			moveNumbers(mouseDelta);
			_lastMouseY = mouseY;
		}
 
		//юзер отпустил мышь. Проверяем если движение было плавным просто довдим до ближайшего значения(leadLines) если же это был резкий жест - запускаем иннерцию
		//проверка резкости движения происходит по энтерфрейму, каждый энтерфрейм проверяем дистанцию между прошлым и текущим положением курсора используюя(_lastEnterFrameMouseY)
		//также ставим "порог резкости" в 5, можно поменять
		protected function onMouseUp(event:MouseEvent):void
		{
			_isMove = false;
			this.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
			this.removeEventListener(MouseEvent.MOUSE_OUT, onMouseUp);
			stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			if(_mouseAcceleration > 5 || _mouseAcceleration < -5)
			{
				//ограничение резкости
				if(_mouseAcceleration > 90) _mouseAcceleration = 90;
				if(_mouseAcceleration < -90) _mouseAcceleration = -90;
 
				_deltaEazeMove = 0;
				//15 тоже подобрано экспериментально
				var innertion:int = _mouseAcceleration/15;
				//находим новое положение
				var newPosition:int = innertion*HEIGHT_OF_NUMBER;
				var firstNumber:mcNumber = _numbersLine.getChildAt(0) as mcNumber;
				//с доводкой
				newPosition = newPosition + firstNumber.y;
				//и запускаем твиннер который дерагет сеттер move
				eaze(this).to((.4 + Math.abs(_mouseAcceleration/100)), { move:newPosition}).onComplete(leadLinesAfetrInnertial);
			}else
			{
				leadLines();
			}
		}
		//здесь мы грубо говоря симулируем вращение спиннер мышкой
		public function set move(value:Number):void
		{
			moveBGLines(value - _deltaEazeMove);
			moveNumbers(value - _deltaEazeMove);
			_deltaEazeMove = value;
		}
		//геттер нужен для aze я возвращаю 0 это ничего не меняет
		public function get move():Number
		{
			return 0;
		}
 
		//очищаем все твины при клике и начинаем "прямое" прокручивание спиннера в след за курсором
		//также слушаем маус ап и маус аут(обрабатываем его также как и маус ап)
		protected function onMouseDown(event:MouseEvent):void
		{
			_isMove = true;
			for (var i:int = 0; i < _numbersLine.numChildren; i++) 
			{
				var number:mcNumber = _numbersLine.getChildAt(i) as mcNumber;
				eaze(number).killTweens();
			}
			eaze(this).killTweens();
			eaze(this.mcLines.mcLine1).killTweens();
			_lastMouseY = mouseY;
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
			this.addEventListener(MouseEvent.MOUSE_OUT, onMouseUp);
			stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
		}
 
		//считаем ускорение движение курсора
		protected function onEnterFrame(event:Event):void
		{
			_mouseAcceleration = _lastEnterFrameMouseY - mouseY;
			_lastEnterFrameMouseY = mouseY;
		}
 
	}
}
без маски это выглядит вот так http://screencast.com/t/4xpEpIGiC
пофикшено
Вложения
Тип файла: zip TestSpinner.zip (2.19 Мб, 98 просмотров)
Всего комментариев 34

Комментарии

Старый 12.06.2013 11:12 Inet_PC вне форума
Inet_PC
Наблюдаются глюки. Пару раз прокрутил, туда-сюда. И в итоге на шкале:85,80,82 и все...
Старый 12.06.2013 14:18 in4core вне форума
in4core
 
Аватар для in4core
Я глюков не заметил, но и писать там самому 5 минут
Старый 12.06.2013 16:08 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
Если много кликать, то все таки глюки есть.
Старый 12.06.2013 19:30 3p.station вне форума
3p.station
 
Аватар для 3p.station
Спасибо, попробую найти баг и пофиксить. Инфокор, час программирования стоит 15-20 баксов, я дам тебе 10 если ты мне напишешь такой компонент. Чтобы можно было задать количество цифр, высоту одной цифры, и всего барабана(без рамки, рабочей области так сказать) дизайн можешь брать самый простой (тупо в иде нарисовать), Ок?
Старый 13.06.2013 09:48 Hauts вне форума
Hauts
 
Аватар для Hauts
Странное развитие комментариев.

Штука не представляющая никакого интереса, по моему мнению. Её ж действительно делать за кружечкой кофе, не напрягаясь и не думая о том, сколько стоит час работы.

Ну и в данной реализации, по-моему, есть очень существенный недостаток, — нормально не видно цифр под плашкой, пока проматываешь. Приходится ориентироваться на соседние цифры, которые сверху и снизу.

in4core, соглашайся на условия
Старый 13.06.2013 15:00 3p.station вне форума
3p.station
 
Аватар для 3p.station
Hauts, плашечку эту можно легко убрать (дизайн не я придумывал). Да и суть поста была не в том, посмотрите какую я штуку сделал, а предложить компонент который кому-то может быть влом писать или просто на это физически нету времени. Да иделать ее не 5 мин, как это кажется.
Давно не тусил на форуме, но еще тогда помню необоснованные понты инфокора, которые как вижу совсем не пропали, отсюда и было предложение. Ответ его тож был предсказуем, забавлялся со своими социальными наблюдениями.
Старый 13.06.2013 15:18 Hauts вне форума
Hauts
 
Аватар для Hauts
3p.station, я про пять минут не говорил

Просто я считаю, что имеет смысл выкладывать то, что действительно необходимо и может занять существенное время, если программировать с нуля.

В данном случае — для тех, кто может эту штуку добавить в свой проект, она довольно бессмысленная. Делать такую с нуля — довольно быстро и просто, как мне кажется. А вот разбираться с чем-то, что уже сделано — по-моему, не оправданно. Ну не стоит она того, чтобы лезть на форум и качать ее, потом менять дизайн. Потом еще и правки вносить. Потом еще и свою написать. Мало ли.

А для тех, кто учится — это очередной пример без пояснений того, как работает. В интернете, понятно, таких примеров куча. Вот только учебного толку с них мало.

Я не к тому, что это плохо и / или как-либо бессмысленно, выкладывать что-то свое всегда полезно.

Если вы готовы раздавать исходники, то не проще ли сразу код вставить здесь, да и пояснений добавить? Тогда и по коду поговорить будет о чем, да и новичкам будет неплохой пример.
Старый 13.06.2013 15:26 3p.station вне форума
3p.station
 
Аватар для 3p.station
Отправка через мыло нужна была как раз для того чтобы узнать скольким оно пригодилось(уже есть один человек). В инете я не нашел ни одного примера/туториала/исходника с хоть както пхожим компонентом. Также с непостояннотью заказчиков по этому проекту я изначально делал возможность действительно легко кустомизировать.
А в целом, да, это не особо развивающий/полезный пост, я согласен. И все же, думаю, комунить пригодится. Если бы я нашел подобную статью, взял бы не задумываясь, так как времени на написания не было практически.
(думаю этот компонент может быть полезен для мобильных апп)
Обновил(-а) 3p.station 13.06.2013 в 17:05
Старый 13.06.2013 17:07 in4core вне форума
in4core
 
Аватар для in4core
Зачем же удалять мои верные сообщения, неприятно когда говорят правду да? Особенно интересно почему же удален кусок про КОД, который действительно написан ужасно!
Старый 13.06.2013 17:08 in4core вне форума
in4core
 
Аватар для in4core
_stage = stage; это кстати тоже жесть)
Старый 13.06.2013 17:13 3p.station вне форума
3p.station
 
Аватар для 3p.station
чувак уймися а
почему линк на стейдж это жесть?
Старый 13.06.2013 17:28 in4core вне форума
in4core
 
Аватар для in4core
3p.station - да я не против, просто ты не прав очень сильно, нет, чтобы сказать, ну да, погорячился , обидно стало, так ты полез в кужилу, зачем? Унялся.
Ну смотри по факту : линк на стейдж жесть, потому что у тебя стейдж и так открыт.
Это все равно, что написать
var num:int = 0;
var xxx:int = num;
Тоесть достаточно одного определения.
По скольку ( на вскидку ) твой компонент уже DO, значит доступ к стейджу есть и так, о чем и говорит _stage = stage. Вторым словом ты это доказываешь. Зачем создавать еще один холдер стейджа, если он уже есть и не пропадет никогда?!

А вот с интерфреймом - все очень плохо. Я не хочу быть злодеем, как некоторые тут, но по сути, очень много в коде таких новичковых ляпсусов.
Старый 13.06.2013 19:36 3p.station вне форума
3p.station
 
Аватар для 3p.station
я то думал что если ДО не в дисплейлисте, то стейджа нету у него...
Старый 13.06.2013 19:38 3p.station вне форума
3p.station
 
Аватар для 3p.station
А что с интерфреймом?
Старый 13.06.2013 20:41 in4core вне форума
in4core
 
Аватар для in4core
Цитата:
я то думал что если ДО не в дисплейлисте, то стейджа нету у него...
Да ну нафиг? КОнечно нету стейджа, только если он не в дисплейлисте, то какую ссылку на стейдж ты хочешь держать? И зачем ее держать ? Ну допустим инициализировал ты компонент - показал на экране, затем удалил с экрана. Далее 3 пути
1) Если объект не показывается, то по сути и действий внутренних с ним быть не должно
2) Зануляем, чем обогощаем ГЦ , а когда снова надо показать создаем заново и добавляем.
3) Можно поступить и так, чтобы иметь возможность ( и это правильно как раз ) задать компоненту свойства начальные и т.п. Тогда по пункту 2, и при новой инициализации - установливаем старое свойство, да хоть даже и в статике компонента хранить.
Собственно держать ссылку на стейдж у компонента который МОЖЕТ быть добавлен - не тру, а у компонента который не добавляется, а считается хелпером - это верное решение.

Ну про интерфрейм я уже написал - перечитай. Он вообще ни к селу ни к городу
Старый 13.06.2013 21:12 GBee вне форума
GBee
 
Аватар для GBee
Примерно такой же компонент в ВиндовсФоне для установки времени и т.п. очень удобен для пальчика. Если его очень легко скиновать под свои нужды и он без глюков, то неплохо. Да и все равно в блогах тихо, а такие вещи как раз в формате блогов.
Старый 13.06.2013 22:03 3p.station вне форума
3p.station
 
Аватар для 3p.station
блин с интерфреймом затуп, там должен быть адд ту стейдж, исправлю - механический профтык.
Ссылку на стейдж держу чтобы потом вызвать дестрой(если он вызывается после того как объект убрали), это после обжСи осталось с дестроями, уберу его вооще...
GBee глюк какойто вроде есть, но пока не зарепродюссил. скиновать правда легко.
Старый 13.06.2013 23:11 in4core вне форума
in4core
 
Аватар для in4core
Цитата:
GBee глюк какойто вроде есть
А вот у емня хоть убей глюков не вижу.
Старый 14.06.2013 15:52 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Цитата:
Зачем же удалять мои верные сообщения, неприятно когда говорят правду да?
Напомни, сколько раз ты удалял сообщения в своём блоге?
Код:
var num:int = 0;
var xxx:int = num;
Пример атас.
Старый 19.06.2013 11:23 toFL вне форума
toFL
Цитата:
Пример атас.
+1. Пример не в тему абсолютно. В данном случае ты получаешь не ссылку на объект, а записываешь конкретное значение в новую "ячейку памяти".
Старый 19.06.2013 12:24 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
Код AS3:
var myObject:Object = { x:1, y:2 };
var objectMine:Object = myObject;
// WTF???
Старый 19.06.2013 13:11 Котяра вне форума
Котяра
 
Аватар для Котяра
Держать ссылку на stage не только вредно, но и полезно.
Особенно если внутри компонента определяются хэндлеры событий стэйджа.
После удаления из Дисплей листа мы не сможем отписаться, т.к. stage==null
тут как раз дополнительная ссылка пригодиться.
Старый 19.06.2013 19:53 toFL вне форума
toFL
Цитата:
Держать ссылку на stage не только вредно, но и полезно.
Да, но в данном случае это не нужно. Тем более есть мягкие ссылки.

Соглашусь с in4core, код ужасен.
Может кто хочет его переписать и показать как нужно?
P.S. Например я или ещё кто-нибудь
Старый 19.06.2013 20:32 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
Не вижу ничего плохо в ссылке на stage при условии правильного ее (ссылки) удаления. В данном примере есть более чем логичный метод destroy, в котором происходит удаление всех связующих со сценой элементов. Более того, модулю не обязательно реализовать IBitmapDrawable, в таких случаях ссылка на stage бывает просто необходима.
Старый 20.06.2013 00:27 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
Цитата:
После удаления из Дисплей листа мы не сможем отписаться, т.к. stage==null
Плохой пример, для этого есть Event.REMOVED_FROM_STAGE
Старый 20.06.2013 01:13 GBee вне форума
GBee
 
Аватар для GBee
Цитата:
Плохой пример, для этого есть Event.REMOVED_FROM_STAGE
А вы уверены, что стейдж будет все еще доступен?
Старый 20.06.2013 11:40 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
Да. В моих приложениях структура основана на стейтах, которые постоянно заменяют друг друга в классе View.
В каждом стейте есть метод redraw, который требует доступ к стейджу и update. В каждом стейте есть подписка на added to stage / removed from stage. Честно скажу, у меня еще ни разу не было ошибки про использование null (stage).
Старый 20.06.2013 11:49 Inet_PC вне форума
Inet_PC
Цитата:
А вы уверены, что стейдж будет все еще доступен?
Судя по документации событие рассылается перед тем как displayobject будет удален из списка отображение, т.е. стейдж доступен. Не вижу никакой проблемы в хранении ссылки на стейдж.
Старый 20.06.2013 12:45 GBee вне форума
GBee
 
Аватар для GBee
Ок, я просто уточнил. Просто REMOVED это как бы совершенное дело - удален. Поэтому интересно.
Старый 20.06.2013 13:26 Котяра вне форума
Котяра
 
Аватар для Котяра
Цитата:
событие рассылается перед тем как displayobject будет удален из списка отображение
А я и не знал. Был убеждён, что событие приходит ПОСЛЕ.
Старый 20.06.2013 15:03 Inet_PC вне форума
Inet_PC
Цитата:
Просто REMOVED это как бы совершенное дело - удален. Поэтому интересно.
Согласен, лучше бы было или REMOVE или REMOVING
Старый 20.06.2013 19:18 3p.station вне форума
3p.station
 
Аватар для 3p.station
вообщем ща вроде работает ок.
Старый 21.06.2013 15:05 Hauts вне форума
Hauts
 
Аватар для Hauts
3p.station, вам ссылка: http://voobschem.ru/ (потом комментарий мой удалите)
Старый 23.06.2013 09:52 3p.station вне форума
3p.station
 
Аватар для 3p.station
благодарю!
 

 


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


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