Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.07.2010, 15:11
petyakurochkin вне форума Посмотреть профиль Отправить личное сообщение для petyakurochkin Найти все сообщения от petyakurochkin
  № 1  
Ответить с цитированием
petyakurochkin
[+4 11.07.10]

Регистрация: 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. Ждать аппаратного ускорения.
Вложения
Тип файла: zip particles.zip (20.7 Кб, 109 просмотров)

Старый 11.07.2010, 18:17
petyakurochkin вне форума Посмотреть профиль Отправить личное сообщение для petyakurochkin Найти все сообщения от petyakurochkin
  № 2  
Ответить с цитированием
petyakurochkin
[+4 11.07.10]

Регистрация: Jun 2010
Сообщений: 9
Никто систему частиц не делал никогда, что ли?(

Старый 11.07.2010, 19:12
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 3  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
При рисовании через copyPixels и с общим обработчиком для всех частиц (без объекта "частица" и вызовов её методов) будет существенно быстрее. draw и постоянные вызовы методов тормозят. Если надо частицы разных цветов и размеров, можно подготовить их заранее (программно) во всех нужных вариантах.

Старый 11.07.2010, 19:30
Сайлас вне форума Посмотреть профиль Отправить личное сообщение для Сайлас Найти все сообщения от Сайлас
  № 4  
Ответить с цитированием
Сайлас

Регистрация: Mar 2008
Сообщений: 259
Пффф, я что-то не понял а вы что работаете постоянно с одной битмапдатой и одним битмапом?
Т.е. вы в цикле буквально затираете экран, отрисовываете и изменяете пикселы его содержимого??
Создатей лучше n битмапов, с разными параметрами изначальными, которые будут ездить по сцене (и даже пусть вы применяете преобразования к ним) - и то будет быстрее.
То, что вы сейчас делаете - это отрисовывание программное многоразовое перерисовывание кучи пикселов.

Старый 11.07.2010, 19:54
petyakurochkin вне форума Посмотреть профиль Отправить личное сообщение для petyakurochkin Найти все сообщения от petyakurochkin
  № 5  
Ответить с цитированием
petyakurochkin
[+4 11.07.10]

Регистрация: Jun 2010
Сообщений: 9
VVAll при наличии у частиц альфа-канала уже не получится использовать CopyPixels, очевидно же. Вариант программной подготовки всех возможных вариантов частиц тоже как-то не впечатляет: чел. глаз может видеть, как я помню несколько миллиардов цветов. Да черт с ним, даже, если сделать 65535 цветов еще остаётся трансформация поворота. Т.е. еще минимум 300 вариантов. Перемножаем. Мде. Нехило так выходит. А ведь еще несколько текстур на одну частицу планируется.

Сайлас:
Цитата:
То, что вы сейчас делаете - это отрисовывание программное многоразовое перерисовывание кучи пикселов.
А в том случае, когда битмапы будут ездить, их будет расчитывать специальная плата для расчёта пикселей, что ли? У флеша же нет аппаратного ускорения, откуда пойдёт прирост прозводительности?

Старый 11.07.2010, 20:15
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 6  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
А не надо замахиваться на такое количество вариантов частиц и прочие навороты. Проблема с альфа-каналом решается точно так же, как и с цветами. Просто надо помнить, что Flash медленный по всем параметрам, и не пытаться использовать его не по назначению.

Старый 11.07.2010, 20:16
Сайлас вне форума Посмотреть профиль Отправить личное сообщение для Сайлас Найти все сообщения от Сайлас
  № 7  
Ответить с цитированием
Сайлас

Регистрация: Mar 2008
Сообщений: 259
Я думаю мало кто расскажет, как обрабатывает флеш движение своих элементов (хотя, на этом форуме, есть знатоки внутренностей флеша). Но хотя бы достаточно того, что те библиотеки написаны не на экшнскрипте, а ниже на с++ скорее всего.

Ну и не говоря, о том, что вы с этими пикселями еще лишние действия делаете. Ну попробуйте крутить и двигать 50 битмапов и посмотрите на результат.

Старый 11.07.2010, 23:26
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 8  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
вот хорошие демки по работе с партиклями:
http://www.nulldesign.de/category/ex...nts/particles/

движки

* FLiNT
http://flintparticles.org/
* Partigen (Not free)
http://desuade.com/products/partigen/
* Pulse Particle System - A general purpose AS3 particle system.
http://www.rogue-development.com/pulseParticles.html
* Emitter - ActionScript 3.0 particle FX engine.
http://code.google.com/p/emitter/
* Stardust - ActionScript 3.0 Particle engine.
http://code.google.com/p/stardust-particle-engine/
* Orion - An all around simple and flexible particle generator.
http://blog.coursevector.com/orion
* particlesun - A 3D or 2D Particle Engine for Actionscript 3.0
http://code.google.com/p/particlesun/
__________________
Отряд Котовскага

Старый 12.07.2010, 00:23
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 9  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
petyakurochkin, проверяете ли вы, перед тем как вызвать draw, попадает ли отрисовываемая частицу в "поле зрение" битмапы, на которой вы рисуете? Если частица выходит за ее границы - то неотрисовка частицы может серьезно увеличить производительность

Старый 05.12.2010, 01:41
formid вне форума Посмотреть профиль Отправить личное сообщение для formid Найти все сообщения от formid
  № 10  
Ответить с цитированием
formid

Регистрация: Feb 2007
Сообщений: 30
А кто-нибудь может хотя бы в общем описать плюсы/минусы этих движков. В частности интересует самый быстрый и самый легковесный.

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:16.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
оптимизация , тормоза , частицы
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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