PDA

Просмотр полной версии : Скрытие объектов


Godwarlock
02.11.2015, 22:19
Всем привет. Столкнулся со следующей проблемой. Есть платформа, по ней двигается персонаж, у него доступен обзор видимости объектов, те объекты что не попадают в обзор - скрываются. Проблема в следующем. В массиве например 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];


}
Подскажите как это дело оптимизировать) Т.к когда все объекты на платформе видимые, фпс проседает в 2 раза примерно при движении.

Добавлено через 4 часа 8 минут
Всё настроил как надо) Надо еще правда поработать над оптимизацией, но в целом повысил фпс)

gloomyBrain
03.11.2015, 20:59
Я бы сложил все объекты в массив и этот массив отсортировал. Функция сортировки должна помещать объект в массив так, чтобы соблюдалось правило: "чем объект левее на экране, тем он ближе к началу массива".
Соответственно, пробегая по массиву от начала к концу, мы будем перебирать объекты слева направо. Это удобно, особенно если запоминать самый левый и самый правый из видимых объектов (можно бегать не по всему массиву, а только от самого левого влево и от самого правого вправо для изменения видимости объектов).

neonoviiwolf
04.11.2015, 03:10
можно по всякому сделать, но ваш косяк в том, что вы в каждом кадре отправляете true/false

я бы, для увеличения производительности наверно бы использовал такой вариант (ну это сходу, уверен, что кто-то получше подскажет).

У примеру завести второй двухмерный чисто числовой массив. В нём будут храниться координаты ваших объектов, а индекс соответствует номеру объекта. Ну и работаем чисто с этим массивом, т.е. меняем тут значения, будто это и есть координаты нашего объекта. Так вот, когда координаты попадают в зону видимости, ТО указываем координаты объекту с соответствующем индексом, передаём ему ссылку на индекс двумерного массива и и объявляем слушатель, который будет присваивать значения двумерного массива к координатам объекта. Вышел из поле зрения, убиваем слушатель, ставим false. Тут фокус в том, что вам не нужно двигать 200 объектов, вам нужно только следить, когда они должны появиться и тогда их выводить, так же уверен, что работа только с числами намного быстрее, особенно если использовать вектор, а не массив. А ещё создайте своего слушателя, который будет следить, когда объект выйдет из поля видимости и скроет его, дабы не заниматься каждый ход проверкой координат, пусть объект сам следит за собой
А если ещё добавить что написано выше..