Flash gamedevФорум

Frame Rate

#0
21:55, 10 мая 2009

Немного оживлю полу-мёртвый форум вопросом к разработчикам игр на AS3. (:
Какой frame rate вы используете в своих играх и как у вас организован игровой цикл? Просто при переходе на Flash я пошёл по проложенному программированием на С++ и HGE пути, я выставляю 120 fps и анимацией мувиков у меня управляет отдельный класс. От этого возникла проблема, что все внутренние анимации в мувике должны быть сделаны графиксами, при этом, если сам мувик сейчас не анимируется, то и внутренние анимации так же стоят. А если вместо графиксов ставить мувики, то они бдут пытаться анимироваться со скоростью 120 fps, что, конечно, совсем мне не нужно.
Логично предположить, что можно выставить, скажем, 30 fps, и всё анимацию сразу затачивать под это значение, но тогда возникает вопрос с обновлением данных, будет либо не точно, либо как вариант обсчитывать за 1 проход несколько раз. В общем есть разные варианты решить эту проблему, но хотелось бы узнать, как это делаете вы. Как? (:

#1
12:31, 11 мая 2009

кагбе 30 fps, обновление данных почти всегда тоже привязано к fps, но если нужна точность , тогда setInterval()

#2
13:28, 11 мая 2009

А если игра выдаёт меньше 30 fps в определённые моменты, то анимация начинает тормозить?
Очень огорчает, что нельзя задать для каждого мувиклипа свой фпс. ):

Да, и ещё тогда сразу вопрос. Я дела анимацию персонажа со скинами в едином мувике (чтобы по 10 раз не добавлять/удалять графику на сцене). В случае своего класса управления анимацией у меня на таймлайне сразу располагается вся анимация для различных движений, а класс следит, чтобы в данный момент проигрывалась заданная анимация (от указанного начального, до указанного конечного фреймов). Скининг задаётся внутренними мувиками. В случае если отдать анимацию на откуп мувиклипам, то надо всё равно как-то ей управлять.
В общем какой-то тёмный для меня вопрос пока - организация анимации и скининг. С одной стороны у меня сейчас всё настроено и работает, но полного удовлетворения это не приносит. Тут либо есть какая-то хитрая, не понятная мне логика, заложенная Макромедией и Адобом, либо Флеш всё-таки не предназначен для игр и придётся плясать с бубном. ):

#3
15:50, 11 мая 2009

да, с тормозами анимации приходится смирится. Боротся с тормозами мне немного помогло такое решение, когда текущий frameRate меньше номинального, подимаем stage.frameRate, меньше - опускаем. Это более-менее заствляет плеер держать фпс на заданом уровне.

private function frameRateControl(): void
    {
      t = getTimer();
      addEventListener(Event.ENTER_FRAME, onEnterFrame);
    }

    private var currentFrameRate: Number;
    private var t: int;
    private var appFrameRate: int = 30;
    private var s: int;

    private function onEnterFrame(e: Event): void
    {
      s++;
      if(!(s %= stage.frameRate)) {
        currentFrameRate = Math.round(stage.frameRate * 1000 / (getTimer() - t));
        t = getTimer();
        if (currentFrameRate < appFrameRate - 1 && stage.frameRate < 40) {
          stage.frameRate++;
        }
        if (currentFrameRate > appFrameRate + 1) {
          stage.frameRate--;
        }
      }
    }

Вся анимация в мувиках и сразу на таймлан,  управление простое, запускаем что нам нужно и ждем конца или заданого фрейма. Может ктото знает другое решение отпишитесь.

Flash gamedevФорум

Тема в архиве.