![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2010
Сообщений: 9
|
В общем, захотелось мне написать что-то красивое. Подумал, что система частиц - это самое оно. Решил сделать подобие огня, но так и не доделал, ибо лаги аццкие. На 50-и частицах у меня начинаются неимоверные тормоза и подбирать параметры при таком рендеринге я как-то не могу.
http://petya-kurochkin.narod.ru/particles.html - это то, что получилось. Исходники во вложении. Немного о том, как я это делал: 1. Создаётся Bitmap. С помощью AddChild он добавляется к экземпляру класса документа. 2. Загружается картинка с файла, и используется как текстура при создании сис-мы частиц. 3. Система частиц (ParticlesSystem) создаёт массив Particles, даёт им случайные текстуры (но в примере я использовал только одну) и рандомизирует всякие параметры: скороть, угловая скорость, угол, начальные координаты, первое время жизни и т.п. 4. Подписываемся на ENTER_FRAME, в котором вызываем метод Render() сис-мы частиц. Та, в свою очередь вызывает метод Render() у каждой частички. Particle.Render обновляет данные о частице (скорость и т.п.) и делает метод Bitmap.Draw() с соответствующими цветовыми и пространственными преобразованиями. Метод наложения multiply. 5. После этого копируем с вспомогательного Bitmap'а всё на основной. Но при такой схеме всё достаточно сильно тормозит. Как можно оптимизировать? Я избавился от всех лишних операций с памятью, пересмотрел код и т.п., но мысли приходит только три: 1. Делать не Draw(...), а использовать какие-то другие средства для рисования, возможно, более быстрые. 2. Избавится от цикла вызовов Particle.Render, а в цикле пройтись по его параметрам из внешнего класса таким образом сократив время на вызов функции. Но мне кажется, что это левое решение, ибо портит архтитектуру + неизвестно, сколько времени потратится на обращение к данным класса Particles. 3. Ждать аппаратного ускорения. |
![]() |
Часовой пояс GMT +4, время: 01:03. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| оптимизация , тормоза , частицы |
|
|