Вне сцены не отображаются объекты DisplayObjects во Flash? - PullRequest
5 голосов
/ 21 февраля 2012

Как Flash работает с элементами, находящимися вне сцены?

Очевидно, что Flash фактически не отображает их (потому что они нигде не отображаются на экране), но процесс их отображения все еще существует, замедляя мою игру так же сильно, как если бы элементы находились на экране.

Или Flash игнорирует элементы, которые не попадают в область визуализации?

Должен ли я вручную управлять удалением объектов из DisplayList и добавлением их обратно в качестве выхода и выхода на сцену, или это будет неактуально?

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Да, они замедляют вашу игру.

В одном из моих ранних экспериментов я разработал игру с боковым скроллером, в которой много NPC, разбросанных по карте, не все видны на одном экране. Мне все еще приходилось просчитывать вещи, но их не было на экране. Производительность была значительно лучше, когда я обработал их удаление из списка отображения, когда это не имело значения (просто проверив их X по отношению к «камере»). Опять же, я не говорю о дополнительном коде и событиях, которые могут быть к ним привязаны, просто о графических дочерних элементах мувиклипа.

Однако, по моему опыту, лучшая практика - рисовать объекты в растровых изображениях. Конечно, если вы уже слишком углубились в свою игру, это может быть неуместно, но если у вас есть время, чтобы инвестировать, это один из лучших способов получить максимум от AS3 в отношении 2D-игр. Я нашел некоторые из лучших уроков, касающихся битовых карт и AS3 в 8bitrocket http://www.8bitrocket.com/books/the-essential-guide-to-flash-games/ Я могу уточнить эту тему, если хотите, но я думаю, что я ухожу от темы здесь.

0 голосов
/ 21 февраля 2012

Даже если некоторые экранные объекты находятся за пределами рабочей области, они все равно выполняются. Если в них воспроизводится какая-либо анимация, это может замедлить работу.

Возникает вопрос: зачем нам хранить неиспользуемые предметы за пределами сцены? если вам нужно «кэшировать» мувиклипы для более быстрой загрузки, загрузите их в ключевой кадр, в который элемент управления никогда не перейдет. например загрузите экранные объекты, которые вы хотите отобразить в кадре 1, затем поставьте stop () на панели действий кадра, сделайте его ключевым кадром, а в кадре 2 загрузите неиспользуемые анимации. поскольку в кадре 1 есть stop (), элемент управления никогда не переходит в кадр 2, но экранные объекты кэшируются.

Или, если у вас есть коды в неподдерживаемых экранных объектах, и, следовательно, вам необходимо загрузить их вместе с основными игровыми компонентами, попробуйте поместить stop () в кадры неиспользуемых экранных объектов, чтобы они не анимировались.

...