Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Скрытие объектов (http://www.flasher.ru/forum/showthread.php?t=211763)

Godwarlock 02.11.2015 22:19

Скрытие объектов
 
Всем привет. Столкнулся со следующей проблемой. Есть платформа, по ней двигается персонаж, у него доступен обзор видимости объектов, те объекты что не попадают в обзор - скрываются. Проблема в следующем. В массиве например 200 объектов, по циклу пробегаюсь по каждому и меняю нужному объекту visible на false. Что происходит, объекты скрываются как положено, но фпс адско проседает
Код AS3:

if (CheckRadius(player, GUI.platformsSave[i].obj, 600)) 
                                {
                                        GUI.platformsSave[i].updateVisible(false);
                                }else
                                {
                                        GUI.platformsSave[i].updateVisible(true);
                                }

Код AS3:

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 объектов, вам нужно только следить, когда они должны появиться и тогда их выводить, так же уверен, что работа только с числами намного быстрее, особенно если использовать вектор, а не массив. А ещё создайте своего слушателя, который будет следить, когда объект выйдет из поля видимости и скроет его, дабы не заниматься каждый ход проверкой координат, пусть объект сам следит за собой
А если ещё добавить что написано выше..


Часовой пояс GMT +4, время: 00:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.