Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Имитация 3д поворота "прямоугольника", реагирующая на мышь. Идет рывками. (http://www.flasher.ru/forum/showthread.php?t=183161)

MINASTIS 14.08.2012 03:35

Имитация 3д поворота "прямоугольника", реагирующая на мышь. Идет рывками.
 
У меня есть прямоугольник, в нем меняются твинами 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
Как так? Я же мышкой двигаю, как она может принимать такие значения?


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

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