Хадей — Друг Детей

Design Mode: 12. Optimizing Actor Performance

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

Recycle Actors When Possible

Игровой движок Стенсила использует два типа актеров, постоянных и тех, которых можно использовать временами. Когда создается постоянный актер, то добавляется новый объект типа «Актер». Этот актёр будет находится на сцене до тех пор, пока не будет удален. Постоянные актеры создаются командой в Create Actor:

Актёры, которых можно рециклировать, работают иначе. Поясню: в этом случае актёр создается и помещается за пределами сцены, в невидимости от игрока. Но он уже подгружен и ждет момента, когда его вытащат и используют. Создается такой актер командой:

Чтобы отправить актера за пределы сцены, используется команда:

Вот иллюстрация того, что происходит. Актёр ждет своей очереди за пределами сцены, в «бассейне», чтобы в нужный нам момент выпрыгнуть на саму сцену:

 

Never Create Large Numbers of Actors Every Frame

Если вы расположите блок создания актера во вкладке событий Always , как на картинке:

то Стенсил будет создавать актера каждый кадр. А кадров в секунду 60. Итого 60 актеров в секунду, и ваша игра через несколько десятков секунд зависнет намертво. Не делайте так.

Вместо этого используйте блок создания актера во вкладках When CreatedWhen This Collides,When This Hears. Эти вкладки событий среагируют быстрее, чем вкладка Always, да и конфуза с 3600 актерами за минуту не случится.

В примере выше мы создали рекукл актёров для взрывов и пуль, т.е. для тех актёров, которых мы будем видеть часто. Для кнопки же меню мы создали обычного актёра, так как она у нас будет только одна, кнопка меню. Вообще, если есть Сила джедая, кнопки вообще не нужны, в противном же случае нужно использовать блок Create Actor.

Remove Actors When Possible

Удаляйте актёров, когда возможно! Память не резиновая, а удалять придется много чего: пули, эффекты, всякие бонусы, враги, Гуфа и так далее. В общем, если нужно удалить актёра, нужно создать для него определенное поведение, и засунуть его, если оно связано со столкновением, в блок (см. картинку ниже). В таком случае, при любом столкновении действие будет свершено.

Можно или убить актёра просто, по-обычному…

…либо зарекуклить его за пределы экрана, чтобы потом снова его использовать. И снова рекуклить. И снова использовать. Рекукл.

Также можно задать какой-нибудь промежуток времени, таймер, и удалить актёра спустя какое-то время (это к слову об Alarm для тех, кто знаком с Game Maker). Используем блок Do After (выполнить после чего-то)

Смысл этого поведения в том, чтобы при удалении несуществующего актёра движок Стенсила не выдавал ошибку.

А ниже идет функция, при которой актёр удаляется, если выходит за границу экрана.

В этом случае, двоичный атрибут Actor On Screen? нужен тут для того, чтобы удостовериться в том, что актёр не будет удален до того, пока есть ещё какой-то шанс появления его на экране. Можно дать значение «правда» (true) для этого атрибута в том случае, когда актёр появляется на экране. Тогда, когда актёр снова покинет экран, функция, показанная в таблице выше, удалит актёра со сцены. Поясняю вне перевода: Мы ставим актёра на сцену, но за сценой, чтобы игрок его не видел. Если не ввести параметр Actor On Screen?, актёр будет тут же удален. Но мы поступим хитро — запустив актёра на действие, можно тут же запустить таймер на несколько секунд (или какое-то другое условие), после которых Actor On Screen? примет значение «true«, и с этих пор, как только актёр выйдет за пределы экрана, он будет удалён.

Ещё одна фишка для удаления актёров это использование Поведений, которые удаляют актёров после каких-то условий, например, после того, как он покинет экран и пройдет некоторое время (можно включить таймер).



Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>