|
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Скрытие объектов
Всем привет. Столкнулся со следующей проблемой. Есть платформа, по ней двигается персонаж, у него доступен обзор видимости объектов, те объекты что не попадают в обзор - скрываются. Проблема в следующем. В массиве например 200 объектов, по циклу пробегаюсь по каждому и меняю нужному объекту visible на false. Что происходит, объекты скрываются как положено, но фпс адско проседает
if (CheckRadius(player, GUI.platformsSave[i].obj, 600)) { GUI.platformsSave[i].updateVisible(false); }else { GUI.platformsSave[i].updateVisible(true); } public function updateVisible(flag:Boolean):void { model.gotoAndStop(setR); if (flag) { model.visible = false; }else { model.visible = true; } sprite.sprites = [model]; } Добавлено через 4 часа 8 минут Всё настроил как надо) Надо еще правда поработать над оптимизацией, но в целом повысил фпс) |
|
|||||
Я бы сложил все объекты в массив и этот массив отсортировал. Функция сортировки должна помещать объект в массив так, чтобы соблюдалось правило: "чем объект левее на экране, тем он ближе к началу массива".
Соответственно, пробегая по массиву от начала к концу, мы будем перебирать объекты слева направо. Это удобно, особенно если запоминать самый левый и самый правый из видимых объектов (можно бегать не по всему массиву, а только от самого левого влево и от самого правого вправо для изменения видимости объектов).
__________________
...вселенская грусть |
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
можно по всякому сделать, но ваш косяк в том, что вы в каждом кадре отправляете true/false
я бы, для увеличения производительности наверно бы использовал такой вариант (ну это сходу, уверен, что кто-то получше подскажет). У примеру завести второй двухмерный чисто числовой массив. В нём будут храниться координаты ваших объектов, а индекс соответствует номеру объекта. Ну и работаем чисто с этим массивом, т.е. меняем тут значения, будто это и есть координаты нашего объекта. Так вот, когда координаты попадают в зону видимости, ТО указываем координаты объекту с соответствующем индексом, передаём ему ссылку на индекс двумерного массива и и объявляем слушатель, который будет присваивать значения двумерного массива к координатам объекта. Вышел из поле зрения, убиваем слушатель, ставим false. Тут фокус в том, что вам не нужно двигать 200 объектов, вам нужно только следить, когда они должны появиться и тогда их выводить, так же уверен, что работа только с числами намного быстрее, особенно если использовать вектор, а не массив. А ещё создайте своего слушателя, который будет следить, когда объект выйдет из поля видимости и скроет его, дабы не заниматься каждый ход проверкой координат, пусть объект сам следит за собой А если ещё добавить что написано выше.. |
Часовой пояс GMT +4, время: 03:50. |
|
« Предыдущая тема | Следующая тема » |
|
|