Форум 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)
-   -   Стабильное циклическое выполнение кода (http://www.flasher.ru/forum/showthread.php?t=205901)

hebep1982 29.12.2013 08:52

Стабильное циклическое выполнение кода
 
Вопрос такой. Ставлю эксперимент чтоб понять как лучше реализовать циклическое выполнение основной функции программы. Есть 3 варианта, судя по книге и гайдам, с помощью основной временной шкалы,методом getTimer() и методом setInterval(). Дело в том что по задумке нужно именно замедлять течение времени с ним связана скорость расчетов падения, движения и тд. некоторых объектов(когда пользователь активирует это замедление). Проблема в том что при setInterval() начинаются рывки и какая-то нестабильность в движении, то быстрее то медленней. Как с этим бороться? setInterval() использую с значением 100...

P.S. Еще со времен JavaScript знаю что данный метод не стабилен и не может обеспечить "плавность" и "стабильность" во Flash я так понимаю тоже самое? Как быть?

Hauts 29.12.2013 12:53

Привязывайтесь к фпс флэшки, то есть onEnterFrame. В нём уже берете значение прошедшего с последнего обновления времени. Это значение используйте для вычислений.

setInterval для основного апдэйта приложения — плохая практика. В любом же случае у вас рендеринг будет, к примеру, 30 кадров в секунду, а интервал будет по три раза на один рендеринг прогоняться, а это бессмысленно в большинстве случаев.

Нужно динамически менять скорость приложения? Физики и т.п.? Можно попробовать так:

Код AS1/AS2:

var prevTime = getTimer();
var timeSpeed = 1; // Коэффициент скорости течения времени
function globalUpdateMethod(){
    var currentTime = getTimer();
    var delta = currentTime - prevTime;
    prevTime = currentTime;
 
    myPhysics.advanceTime( delta * timeSpeed )
}
this.onEnterFrame = globalUpdateMethod;


hebep1982 29.12.2013 14:07

Дело в том что я застопорил основную шкалу а fps у меня 10-12 для моей скромной анимации вполне сносно, более высокая чрезмерно напрягает проц мобилы :). В программе два кадра инициализация и работа где все делается через setInterval. Но ваша идея ясна, благодарю вас. Думаю, учитавая ваш совет, вернуться к 3 кадровому циклу (инициализация, обработка , вывод).

Hauts 29.12.2013 15:06

Проц мобилы? Это приложение для мобильников?

hebep1982, мне кажется, вам нужно с самого начала скорректировать "курс" разработки / обучения в сторону as3 / AIR.

hebep1982 29.12.2013 20:46

ну не то чтобы для мобильников :) Да уже присматриваюсь :) Думаю с начала года начну AS3 учить а то действительно AS2 уже устарел и учебников на бумаге уже не найти. Спасибо в любом случае :) В AS3 эти проблемы решены?

Hauts 29.12.2013 20:59

Цитата:

В AS3 эти проблемы решены?
Мне кажется, у вас будет основной проблемой изучить ас3 до такой степени, чтобы находить в нем реальные проблемы.

В общем я к тому, что проблемы, как таковой, в этой теме нет. Решение я уже писал :)


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

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