Лучший способ оптимизировать мою домашнюю игру Flex? - PullRequest
0 голосов
/ 05 января 2011

У меня вопрос о создании флеш игр во Flex.Сейчас я занимаюсь разработкой 2D-файтинга по ссылке: http://xoz.netai.net/stickfightjx/StickFightJX.html

Однако я не уверен, насколько эффективно я запрограммировал основной цикл.

Поскольку я никогда не читал учебник и не видел других игр Adobe Flex, я не знал, как их реализовать.У меня есть экземпляр Timer, который вызывает функцию обновления каждые 24 кадра, которая обновляет все игровые объекты и представления.

Есть ли способ сделать это быстрее?Я что-то трачу?

// This is in an MXML Application

private var timer:Timer = new Timer(1 / 24);

private function onInitialize(e:Event):void
{
    timer.addEventListener(TimerEvent.TIMER, onUpdate);
    timer.start();
}

private function onUpdate(e:TimerEvent):void
{
    gameStateManager.update();
}

1 Ответ

1 голос
/ 05 января 2011

То, что у вас есть, должно работать нормально, но вы можете столкнуться с проблемами на медленных компьютерах, где частота кадров ниже, чем вы ожидаете.

Для плавной анимации вместо этого вы захотите прослушать событие ENTER_FRAME.Ваш метод update () должен принимать в качестве параметра дельту времени с момента последнего кадра.Вы можете использовать это для расчета времени выключения, а не за кадром.

Например:

...
// Called from your original code.
private function update():void
{
    xPos += 10;
    yPos += 5;
}
...

В этом случае у объекта обновления будут увеличены члены xPos и ​​yPos на 10и 5 соответственно так часто, как вызывается событие TIMER.На медленных компьютерах процессор не сможет поддерживать скорость, а время между обновлениями будет больше и замедлит всю игру, что значительно упростит борьбу.

Обновления также не будут синхронизированы счастота кадров, в результате чего анимации выглядят прерывисто.Это происходит потому, что иногда перед повторной визуализацией холста будет более одного обновления, то есть вместо этого объект изменит свои xPos и ​​yPos на 20 и 10 для этого кадра.

...
// Called from ENTER_FRAME with the time since the last call passed in.
private function update(deltaT:Number):void
{
    xPos += 10 * deltaT;
    yPos += 5 * deltaT;
}
...

В этом случаеОбновляющий объект будет изменять свои элементы xPos и ​​yPos на 10 и 5 соответственно один раз в секунду (если ваш deltaT в секундах), независимо от того, насколько медленен процессор.Обновления также происходят один раз и только один раз за каждый раз, когда визуализируется холст, поскольку вы используете событие ENTER_FRAME.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...