Показать сообщение отдельно
Старый 03.07.2011, 02:33
Kolyunya вне форума Посмотреть профиль Отправить личное сообщение для Kolyunya Найти все сообщения от Kolyunya
  № 8  
Ответить с цитированием
Kolyunya

Регистрация: Jul 2011
Сообщений: 21
Спасибо всем ответившим!

Продолжая дискуссию: пишу класс, вычисляющий скорость движения курсора мыши. Каким образом метод моего класса будет получать текущую координату курсора мыши без доступа к объекту stage (читай: не имея ссылки на объект stage)?

trace(stage) = null только если экземпляр этого класса не добавлен на таймлайн. НО! Добавить его туда я не могу, т.к. класс должен работать внутри других классов.

Прикладываю код класса, если кто захочет помочь советом. На данный момент экз. класса получает ссылку на сцену в кач. параметра.
Спасибо!

Код AS3:
package src.tools
{
	import flash.events.*;
	import flash.display.Stage;
 
	/*
	Класс, позволяющий вычислять скорость движения курсора мыши
	и координаты курсора.
	Имеет 2 приватных свойства: ссылка на таймлайн и массив координат мыши
	Имеет 4 метода: возвращающают скорости по горизонтали и вертикали, а также
	координаты курсора в данный момент.
	*/
 
	public class MouseWatcher
	{
		// Свойство получит ссылку на сцену
		private var mStage:Stage;
		// Свойство, содержит координаты курсора в предыдущий момент времени
		// [0] - по горизонтали
		// [1] - по вертикали
		private var mPositionPrev:Array;
 
 
 
		// Конструктор класса
		public function MouseWatcher(mStage:Stage)
		{
			this.mPositionPrev = new Array();
			// Определяем корневой таймлайн
			this.mStage = mStage;
		}
 
 
 
		// Метод возвращает горозонтальную скорость курсора
		// Один аргумент отвечающий за вывод скорости или ее модуля 
		public function mouseSpeedHor(abs:Boolean):Number
		{
			var mousePosHorCurr:Number;//Текущая координата курсора
			var mousePosHorDiff:Number;// Разница между предыдущей и текущей координатой
			mousePosHorCurr = this.mStage.mouseX;// Текущая координата мыши
			mousePosHorDiff = mousePosHorCurr - this.mPositionPrev[0];// Разность координат
			this.mPositionPrev[0] = mousePosHorCurr;// Текущая координата сохраняется как устаревшая
			//Если надо найти модуль скорости ...
			if (abs)
			{
				// ... то мы его вычисляем
				mousePosHorDiff = Math.abs(mousePosHorDiff);
			}
			return mousePosHorDiff;
		}
 
 
 
		// Метод возвращает горозонтальную скорость курсора
		// Один аргумент отвечающий за вывод скорости или ее модуля 
		public function mouseSpeedVert(abs:Boolean):Number
		{
			var mousePosVertCurr:Number;//Текущая координата курсора
			var mousePosVertDiff:Number;// Разница между предыдущей и текущей координатой
			mousePosVertCurr = this.mStage.mouseY;// Текущая координата мыши
			mousePosVertDiff = mousePosVertCurr - this.mPositionPrev[1];// Разность координат
			this.mPositionPrev[1] = mousePosVertCurr;// Текущая координата сохраняется как устаревшая
			if (abs)
			{
				// ... то мы его вычисляем
				mousePosVertDiff = Math.abs(mousePosVertDiff);
			}
			return mousePosVertDiff;
		}
		public function get mPosX():Number
		{
			return this.mStage.mouseX;
		}
		public function get mPosY():Number
		{
			return this.mStage.mouseY;
		}
	}
}


Последний раз редактировалось Kolyunya; 03.07.2011 в 02:42.