У меня есть прямоугольник, в нем меняются твинами rotationX и rotationY по евенту MOUSE_MOVE, привязанному к stage.
Вот код, который выполняется:

Код AS3:
var rotateX:Tween = new Tween(this,"rotationX",Regular.easeOut,this.rotationX,percentY * 40,23);
var rotateY:Tween = new Tween(this,"rotationY",Regular.easeOut,this.rotationY, - percentX * 40,23);
После изучения и небольшого понимания принципа скроллера, недолго думая, я накидал код, который будет плавно по чуть-чуть двигать объект, словно он поворачивает "лицо" на мышку.
40 в этом коде символизирует насколько сильно будет идти поворот.
Все идет гладко для моей сцены 500 на 400 пикселей. Разверни же флешку на весь экран или на сайте сделать ее большой и двинь мышкой дальше этих "безопастных" 500 на 400 пикселей, как ее начинает некисло так колбасить (не мышку, эээ точнее его, прямоугольник начинает колбасить).
Конечно проблема еще связанная с твинами, что я создаю сотни твинов благодаря этому коду, которые без своей ссылки каждый сидят и умирают или где-то там в GC находятся спустя минуту движения мышкой.
Определенных глюков это не дает, но все равно. Думаю, не проще ли движение делать с помощью одного ENTER_FRAME, который просто для плавности будет уменьшать скорость при приближении к разнице его_поворот и процентное_положение_мыши_на_сцене.
Не факт, что это "колбас", кстати, вылечит. Почему так происходит не знаю.
Кстати, вполне возможно мой код неправильный, вычисления процента мышки на сцене и передача на твин поворота.
Только что провел пару тестов, судя по всему, как только percentY или percentX становятся больше 0.6, rotation-ы сходят с ума из-за скорости и количества поворотов, которые им надо сделать, благодаря умножению percent-ов на 40.
Пробовал даже с уменьшением скорости при увеличении процентов.
Вот код, как ни странно, fuck! выдается, а вот движение продолжается.

Код AS3:
var percentY:Number = mouseX / stage.stageWidth;
var percentX:Number = mouseY / stage.stageHeight;
var speedX:Number = 60-(percentX*100);
var speedY:Number = 60-(percentY*100);
if (speedX > 0)
{
var rotateX:Tween = new Tween(this,"rotationX",Regular.easeOut,this.rotationX,percentX * speedX,23);
}else {
trace("fuck!");
}
if (speedY > 0)
{
var rotateY:Tween = new Tween(this,"rotationY",Regular.easeOut,this.rotationY, - percentY * speedY,23);
}
Вы сами можете опробовать, кстати, создав функцию что играет с любым объектом на MOUSE_MOVE.
Добавлено через 13 часов 10 минут
Сделал еще пару тестов, обнаружил проблемы в mouseX и mouseY.
Вот выхлоп. Очень странные значения показывает mouseX если ее придвинуть к дальнему углу сцены.
Скачат эти значения, словно рандомные.
Цитата:
Происходит это: mouseX=646.75 делится на ширину сцены, что равно 500
PercentX= -1.3500999999999999
Происходит это: mouseX=858.05 делится на ширину сцены, что равно 500
PercentX= -1.6291
Происходит это: mouseX= 1958.95 делится на ширину сцены, что равно 500
PercentX= -3.0158
Происходит это: mouseX=-748.6 делится на ширину сцены, что равно 500
PercentX= 0.0446
|
Как так? Я же мышкой двигаю, как она может принимать такие значения?