Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ускорение времени (http://www.flasher.ru/forum/showthread.php?t=146696)

evgen4ik 15.11.2010 15:39

ускорение времени
 
Здравствуйте. Подскажите, плиз, как сделать ускорение времени!
Может есть функция изменения фпс?

mikhailk 15.11.2010 15:45

на фпс (и событие enterFrame) завязываться не стоит.
у разных пользователей будут разные результаты

выставьте фпс побольше (хоть 100), а движения организовывайте по времени.
для ускорения-замедления - параметр, который учитывайте при расчете движения

КорДум 15.11.2010 15:45

Чтобы преодолеть пространственно-временной барьер? :D
Используйте таймер, если надо. А вообще, для чего это вам?

udaaff 15.11.2010 15:45

Stage#frameRate

mikhailk 15.11.2010 15:46

влетит автор с фреймрейтом
все равно по времени корректироваться придется

evgen4ik 15.11.2010 16:00

мне нужно сделать ускорение в игре...
там ведь не только программное перемещение, но и анимации. и всё это нужно ускорить!

Добавлено через 12 минут
Stage#frameRate для моей цели подошёл.... но возник интересный непонятный момент!
в игре есть скроллинг по карте, и при ускорении frameRate в целое количество раз всё движется как по маслу. но стоит изменить коэффициент ускорения на дробное число, и скрол начинает дёргаться! почему?

medvedya2 15.11.2010 16:33

frameRate для этого менять очень плохо,
лучше сделать один обработчик, EnterFrame илм таймера
который будет вызывать функцию у каждого объекта.
тогда не будет проблем с регулировкой скорости (например если вам надо ускориться в полтора раза то тогда обработчик первый раз вызывает функции один раз второй раз вызывает два раза - выведите формула для расчета).

не стоит делать frameRate больше 60.
а тем более дробный.

ZergMaster 15.11.2010 17:01

если вы пишете в кадре, то код таймера будет выглядеть так:
Код AS3:

var period:Number = 1000;
var animTimer:Timer = new Timer(period);//частота срабатывания таймера в милисекундах
    animTimer.addEventListener(TimerEvent.TIMER, Animation);
    animTimer.start();
 
function Animation(e:TimerEvent):void
    {
        функцияВкоторойВсяВашаАнимация();
        e.updateAfterEvent();
    }

изменяя переменную period вы будете изменять скорость анимации... чем меньше число - тем быстрее.

-De- 15.11.2010 17:03

Я давно талдычу, что делать надо вот так http://www.kongregate.com/forums/4/topics/1773 как во 2-м посте.
Ну т.е. должно быть некое "время между фреймами", от которого всё пляшет (эти ваши твины так сделаны).
Только так надо делать изначально, потому как потом и анимации хрен пойми уже как сделаны и таймеров понатыкано.

evgen4ik 15.11.2010 17:41

medvedya2, ваша мысль ясна и, конечно, принята в базу знаний;)
но как не меняя frameRate ускорить анимацию?

-De-, английский для меня пока тёмный лес.....
Можно в кратце, как использовать то самое "время между фреймами"?

-De- 15.11.2010 17:51

Ну смысл в том, что нет никакого фреймрейта в принципе, а есть только время с прошлого кадра. Собсно всё. Как примерно организовать - там есть код. play() у мувиков не использовать, когда надо показать след. кадр использовать gotoAndStop(). Таймеры не использовать или написать другие, которые тоже апдейтятся каждый фрейм с указанием, сколько времени прошло.
Тогда тупо искусственно увеличивая прошедшее с прошлого кадра время получаем ускорение какое надо.

mikhailk 15.11.2010 18:43

Цитата:

Сообщение от medvedya2 (Сообщение 949885)
не стоит делать frameRate больше 60.
а тем более дробный.

Дробный - да.
А вот по поводу фреймрейта - та же альтренатива рекомендует ставить сотню (и в примерах у них сотня стоит). Хотя реально, когда начинается обсчет 3D, больше 60-ти я ни разу не видел.

ShockWave512 15.11.2010 18:51

скажу проще:
если у вас есть проект с кучами ручной и программной анимации, то переработать всё это можно будет:
1) вручную, пробегаемся по коду и мувикам, вставляем глобальный код/класс для смены скорости, который "двигает" анимационные ключи в нужную сторону (тяжкий вариант, зависит от сложности проекта)
2) собрать проект заново с учетом, этих ваших clock-movers (самый расово верный метод)
3) тот метод что уже предлагали, сменить кол-во кадров в секунду для всей флеши, раз там возникают глюки, значит не совсем подходящий, хотя и самый (значительно!!!) простой из всех вариантов

medvedya2 15.11.2010 23:31

Цитата:

Сообщение от evgen4ik (Сообщение 949904)
но как не меняя frameRate ускорить анимацию?

забыть про метод play(), использовать nextFrame().


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

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