Показать сообщение отдельно
Старый 11.10.2008, 01:27
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 4  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Код:
class ForceVector {
	private var _aArr:Array = new Array(); //массив, куда пишутся координаты мыши
	private var _nInterval:Number = null; //идентификатор интервальной функции
	private var _timeTrigger:Number = 50; //значение по умолчанию отрезка времени в милисекундах в интервале которого должен вычисляться вектор силы	
	function ForceVector(nTimeTrigger:Number) {	//конструктор, принимающий если надо значение временного интервала
			timeTrigger = nTimeTrigger;
			_aArr[0] =_aArr[1] = [_xmouse, _ymouse]; //запись начальных координат мыши при инициализации
			_nInterval = setInterval(this, "recordXY", _timeTrigger); //запуск интервальной функции, соответственно переданному значению временного отрезка
	}	
	private function recordXY():Void { //собственно запись  координат в массив из двух элементов по кругу
		_aArr[0] = _aArr[1];
		_aArr[1] = [_xmouse, _ymouse];		
	}
	public function getForceXY():Array { //возвращает разность актуальных координаты, записанные в массив
		clearInterval(_nInterval); //убивает интервал
		return [_aArr[1][0] - _aArr[0][0], _aArr[1][1] - _aArr[0][1]]; //дельта X и дельта Y - по сути это и есть вектор силы		
	}
	
	public function get timeTrigger():Number { //геттер
		return _timeTrigger;
	}
	public function set timeTrigger(nTimeTrigger:Number):Void { //сеттер
		if((nTimeTrigger) && nTimeTrigger >= 10) { //проверка, что интервал передан в конструктор и, что он больше 10 мс - иначе вектор будет слишком маленьким
			_timeTrigger = nTimeTrigger;
		}
	}
}
пример использования:
Код:
mcClip.onPress = function():Void { //какой-то клип, который надо кинуть, пнуть или еще что-то
    this.startDrag(); //начинаем перетаскивание
    this.force = new ForceVector(); //запускаем обсчет вектора силы
};
mcClip.onRelease = function():Void {
    stopDrag();
    this.aXY = this.force.getForceXY(); //создаем свойство у клипа, в которое передается дельта X и дельта Y вектора силы
    delete this.force; //удаляем вектор силы
    this.kick(); //какая-то функция, обрабатывающая вектор силы и совершающая необходимые действия
//доступ к дельтам через mcClip.aXY[0] и mcClip.aXY[1] - дельта X и дельта Y соответственно
};
mcClip.onReleaseOutside = mcClip.onRelease; //бывает, что при резком рывке мыши она "слетает" с мувиклипа и событие onRelease тогда не происходит
__________________
скриптограф