Форум 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=116324)

wvxvw 26.09.2008 14:47

Оптимизация системы частиц.
 
Вложений: 1
Есть вот такой вот класс... ничего особенного, вроде, но, почему-то, если создавать 200+ частиц использование CPU со временем по-тихоньку увеличивается... Совсем не сильно, но, тем не менее... (количество задействованой памяти при этом не меняется). Может у кого-нибудь есть предположения, что бы это могло быть?

L1965 26.09.2008 16:35

Код:

_scene.removeChild(a);
_scene.addChild(pt);
 arr.splice(i, 1, pt);

Я очень плохо знаю Flash, но не может ли быть ошибка здесь? Ведь в момент removeChild(a) на а существует ссылка в arr. Может, лучше не уничтожать частицу, а просто передвинуть ее в некое новое положение и изменить скорость и ускорение на начальные значения?

mre 26.09.2008 16:46

У меня не наблюдается прироста нагрузки на CPU, постоянно 60-70%, для 300 частиц.
Только fps не очень большой, ну это и понятно, BlurFilter все-таки.

Кстати, раз уж заметил, наверное
Код:

this.removeEventListener(Event.REMOVED_FROM_STAGE, handleRemoved);

Волгоградец 26.09.2008 17:48

Тоже проверил - прироста CPU Usage нет. Хотя визуально со временем тормозить начинает сильнее.

wvxvw 26.09.2008 19:19

@ L1965:
В принципе, вариант. Это немного другая анимация получится, но вобщем, тоже можно.

Хм... не знаю, может показалось, или что-то на фоне ему мешало... надо будет еще вечером попробывать.

Edit: Ого... поменял удаление-добавление на смену координат, почти в 2 раза меньше нагрузка стала... пасиб =)

r_r_f_r 27.09.2008 14:51

Добавь

Код:

cacheAsBitmap = true;

wvxvw 27.09.2008 17:33

О, пасиб. Хм... я думал, что шейп с битмап заливкой должен и так восприниматься как битмап... может тогда вообще Particle от Bitmap унаследовать...
Прикольно =) 2000 заблуреных частиц да еще и с прозрачностью рисуются вполне нормально при 30 ФПС (у меня CPU Usage даж за 50% не переходит). Чесно, даж не думал, что флеш такое может =)

r_r_f_r 29.09.2008 01:37

А ещё можеш позаменять все
Код:

new Point(...)
На один единственный
Код:

private var tempPoint:Point
И его уже изменять.
так же вынести побольше чего в private.

А вообще forEach работает медленнее чем обычный

Код:

var i:int = 0;
var max:int = _array.length;

while (i < max)
{
    i++;
}


wvxvw 29.09.2008 16:46

Чего-то мне по поводу forEach сомнительно... по идее не дложно так быть... но еще не проверял, проверю - скажу =)
По поводу новых поинтов - да, это я уже понял, что создать объект - дороже получается, чем свойства поменять =) так и сделал.
У меня там вроде паблики только методы... там нету пабликов свойств... (или, если имеются в виду свойства партикла, то их максимум на интернал можно поменять... но, не думаю, что будет разница) сорри, сейчас просто не могу проверить, чуть пожже. Но все равно спасибо =)

r_r_f_r 30.09.2008 01:14

Про private я хотел сказать что в цикле var i:int = _array[i] - работает медленнее нежели объявить i вне цикла а изменять её в самом цикле, а самые часто используемые вынести вообще в область видимости класса.
(ведь минимум все с локальной областью видимости var'ы нужно потом габаджем удалять)

Проверил твои пересчёты просто в цикле без изменений свойств(перерисовки) работают быстрее на 70% чем forEach

Даёш 3к частиц без тормозов:)


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

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