Как избавиться от лагов, вызванных множеством вражеских экземпляров? - PullRequest
0 голосов
/ 01 ноября 2011

Я создаю флеш-шутер, и я столкнулся с одной проблемой. Когда на сцене много монстров, которые видны игроку, игра начинает зависать. На мой взгляд, это связано с Event.ENTER_FRAME (у каждого вражеского экземпляра есть), где выполняется z-сортировка, движение врага, обновление других вещей, таких как здоровье. Поскольку такие вещи, как Theese, не могут быть сделаны каждую секунду или с одинаковым интервалом времени, я использую ENTER_FRAME. Мой вопрос, как я могу иметь много экземпляров врага в моей игре, и при этом не отстать от него? Я выполнил оптимизацию во всем коде, и если я не ошибаюсь, большое количество врагов - это узкое место в производительности.

Спроси меня, если я не ясно чтобы увидеть игру, перейдите на http://ernyz.lhosting.info/bandymas.html или, если вы хотите увидеть код, я смогу поставить его здесь, просто спросите:)

Ответы [ 2 ]

5 голосов
/ 01 ноября 2011

Скорее всего, проблема связана с событиями ввода кадра для каждого экземпляра. Одно событие, когда вы перебираете все экземпляры и выполняете действия, обычно быстрее.

Вам не нужно много менять: вместо того, чтобы добавлять слушателя к каждому врагу, добавьте только одного слушателя на сцену и вызовите функции обновления врагов.

class Enemy {
    function update(e:Event) { /* ... */ }
}

class Main {
    function onEnterFrame(e:Event) {
        for each (var enemy:Enemy in enemies) {
            enemy.update(e);
        }
    }
}
1 голос
/ 01 ноября 2011

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

Но наличие одного события ENTER_FRAME для каждого объекта - это действительно большие накладные расходы, которых легко избежать.

Хорошая практикапрежде чем оптимизировать ваш код, нужно запустить его через профилировщик.Я не верю, что настоящая Flash-программа имеет это, но Flash Builder, безусловно, имеет.Если вы опубликуете нам скриншот или журнал профилируемой игры, мы можем оказать вам большую помощь.

Быстро играя в вашу игру, я увидел, что все ваши враги - это куча графики с кучейградиентов, поэтому дорого обходится.Вы пытались установить низкое качество?Лаг исчезнет?

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