PDA

Просмотр полной версии : [AS 2.0] Большое кол-во однотипных MovieClip'ов, увеличение производительности


Sneg
29.08.2006, 15:22
Добрый день. Имеется, к примеру, большое игровое поле 100x100. Каждая клетка это экземпляр класса, который наследуется от MovieClip'a. Внутри происходит простая заливка цветом beginFill и т.п. Проблема в том что при большом кол-ве таких объектов (>5000) все это дело начинает здорово тормозить. Вопрос: уменьшатся ли тормоза если использовать заливку beginBitmapFill? Как в данной проблеме может помочь классы Bitmap'a? И как вообще можно увеличить FPS при таком большом кол-ве объектов, видимых одновременно на экране? (от MovieClip отказаться не могу - должен регировать на события Mouse и т.п.)

Заранее спасибо Вам за ответы.

etc
29.08.2006, 15:23
Используй cacheAsBitmap

Sneg
29.08.2006, 15:40
Спасибо за совет. Стало лучше, но не достаточно (окошко что скрипт слишком долго работает все же вываливается). Есть еще способы ускорить работу?

Nirth
29.08.2006, 15:44
Автор темы может мне объяснить причем тут AS2 ?

Sneg
29.08.2006, 15:47
Наверное потомучто это объекты наследники MovieClip'oв,а не сами MovieClip'ы в чистом виде - хотя по сути, это накак не влияет на проблему.

__i
30.08.2006, 14:59
попробуй уйти от использования большого количества мувиков, сделай 1 а в нем в зависимости от положения/нажатия мыши рисуй квадраты

Sneg
30.08.2006, 15:55
Да к сожалению с таким кол-вом объектов (10000) тормозит всегда - даже если это просто квадратики. Решение придумал немного другое. Поскольку все поле состоит клеток, то я изменил класс GameCell на простой класс с данными GameCellData (GameCell был наследником MovieClip) и также создаю экземпляры этого класса и присваиваю им те же свойства что были у класса GameCell. Только поле сейчас создается как простая сетка и клетка на которой находится Mouse определяется исходя из размера клетки и т.п. параметров - математически.

D12
31.08.2006, 01:31
Из любопытсва , а зачем тебе 10тысяч квадратиков 100х100 ?

Sneg
31.08.2006, 12:02
Игровое поле с фишками, состоящее из клеток. При небольших размерах 3x3 - 70x70. Все работет красиво и хорошо, а уже при 70x70 становится уже плохо - выпадает алерт о слишком долгой работе, вот и приходится прибегать к таким вот извращениям.

etc
31.08.2006, 14:02
А с чего это выпадает алерт? Ты разве выполняешь какие-то длинные вычисления? Или у тебя алерт при построении вылетает? Если да, то строй блоками, скажем, 5x5 за кадр.

Sneg
31.08.2006, 19:32
У меня нет кадров, все делает в одном первом кадре. Точнее там инициализируются классы необходимые для работы. После получения необходимых данных от сокет-сервера, инициализируется класс GameField который и занимается построением поля и инциализацией GameCell'ов. Построение и ициализация в цикле. Но даже если мы отказывает от цикла и строим постепенно с помощью какого-нибудь setInterval(); то при построении всего поля, тормозит уже все (из-за 10000 GameCell'ов - которые еще в свою очередь могут содержать вложенные - например с номером ячейки). А при дальнейшей работе - когда добавляем фишки - то объектов становится еще больше, и все работает еще медленне. Поэтому кроме как сетки - другого способа ускорить работу при таком кол-ве объектов я пока не вижу.