Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Подскажите формулу расчета об/мин в зависимости от fps (http://www.flasher.ru/forum/showthread.php?t=143895)

drobinkin 28.08.2010 16:00

Подскажите формулу расчета об/мин в зависимости от fps
 
Туплю что-то.
Мне нужно, чтобы в сцене с заданным фпс разные объекты совершали различное кол-во оборотов за минуту одновременно. А что-то никак не соображу — чую, что не сложно, но...
Спасибо.

samana 28.08.2010 17:19

Смотри, вот написал функцию. Принимает параметры
1.объект который будет крутится
2.кол-во кругов
3.за сколько секунд
Код AS1/AS2:

function rot(obj, range, sec) {
        var start_time = getTimer();
        obj.onEnterFrame = function() {
                var time = 1000*sec;
                var ang = 360*range/time;
                var timeLeft = getTimer()-start_time;
                obj._rotation = ang*timeLeft;
                trace(timeLeft/1000+" прошло сек");
                if (timeLeft/1000>=sec) {
                        obj._rotation=360*range //что бы не было погрешности
                        delete obj.onEnterFrame;
                }
        };
}

И например закручиваем клип "clip" на 3 круга за 30 секунд
Код AS1/AS2:

rot(clip,3,30);

Что-то вроде этого.

drobinkin 28.08.2010 19:08

samana, афигеть, большое человеческое спасибо, попробую.
Я так понимаю, эта функция не зависит от фпс?

samana 28.08.2010 19:22

Пожалуйста. Да, от FPS не зависит.
Возможно будет целесообразным просто использовать флешевские Tween.

in4core 28.08.2010 19:33

Чей то не зависит? А enterFrame от fps не зависит по вашему?

samana 28.08.2010 19:49

Зависит конечно. Расчёты поворота просто будут правильные во времени, не зависимо от FPS, а перерисовка конечно только по EntreFrame.

Добавлено через 6 минут
Ладно, виноват... Вот тогда такой вариант, тут хоть 3 FPS ставь, всё равно будет плавно крутиться.
Код AS1/AS2:

function rot(obj, range, sec) {
        var start_time = getTimer();
        var go=setInterval(r,10)
        function r() {
                var time = 1000*sec;
                var ang = 360*range/time;
                var timeLeft = getTimer()-start_time;
                obj._rotation = ang*timeLeft;
                trace(timeLeft/1000+" прошло сек");
                if (timeLeft/1000>=sec) {
                        obj._rotation=360*range //что бы не было погрешности
                        clearInterval(go)
                }
                updateAfterEvent()
        };
}


drobinkin 28.08.2010 20:07

Спасибо еще раз, джентльмены :)
Да, сорри, я забыл уточнить — вращение должно быть непрерывным, т.е. число оборотов в минуту — это скорость вращения (непрерывного).
Щас пока не могу проверить эту функцию — она это предусматривает или прокрутилось N раз и стоп?

samana 28.08.2010 20:12

Нет, тут после прокрутки останавливается, если нужно постоянное вращение, просто убери условие
Код AS1/AS2:

....
if (timeLeft/1000>=sec) {
                        obj._rotation=360*range //что бы не было погрешности
                        clearInterval(go)
                }


drobinkin 28.08.2010 20:28

О, класс, только что проверил — усе пашет :) Жаль плюсов тут нет :)
Самана, для пущей универсальности твоей функции думаю добавить сюда параметр direction, равный 1 и -1 для задания направления вращения, т.е. по/против часовой стрелки. Я так понимаю — это просто множитель для угла:

Код AS1/AS2:

function rot(obj, range, sec, dir) {
        var start_time = getTimer();
        var go=setInterval(r,10)
        function r() {
                var time = 1000*sec;
                var ang = dir*360*range/time;
                var timeLeft = getTimer()-start_time;
                obj._rotation = ang*timeLeft;
                trace(timeLeft/1000+" прошло сек");
//                if (timeLeft/1000>=sec) {
//                        obj._rotation=360*range //что бы не было погрешности
//                        clearInterval(go)
//                }
                updateAfterEvent()
        };
}
 
 
rot(clip,3,30,-1);


samana 28.08.2010 20:56

Можно просто задать повороты с минусом
Код AS1/AS2:

rot(clip,-1,30)



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

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