Использование пресетов Редактора Систем Частиц в играх
Редактор сохраняет свои пресеты в файлы particle1.psi - particle9.psi,
которые могут быть загружены прямо в вашу игру. Здесь представлено детальное объяснение, как их использовать.
Инициализация, самый простой подход
Используйте этот метод, если вам просто надо получить параметры из пресета и спрайт для отображение
частиц уже готов:
hgeParticleSystem *ps;
ps = new hgeParticleSystem("particle1.psi", sprite, 50);
Вуаля! Система частиц готова к запуску!
Последний параметр конструктора hgeParticleSystem - частота
кадров, с которой система должна обновляться. Система частиц использует нелинейные функции движения,
поэтому ее внешний вид может изменяться, в зависимости от частоты. Этот метод позволяет сохранять их
постоянными при любой частоте.
Инициализация, не самый простой путь
Используйте этот метод, если хотите воссоздать в точности такую же систему, какая была в редакторе,
используя только информацию из пресета.
Сначала надо загрузить пресет системы частиц и текстуру, не обращаясь пока к изображению частицы:
HTEXTURE tex = hge->Texture_Load("particles.png");
hgeParticleSystemInfo *psi =
hge->Resource_Load("particle1.psi");
Теперь нужно создать спрайтовый объект и настроить его. Можно использовать любой спрайт, который
у вас есть, но если вы хотите использовать параметры спрайта, установленные в редакторе, он
сохранены в поле sprite структуы hgeParticleSystemInfo
следующим образом: старшее WORD содержит режим смешивания, и младшее WORD содержит
номер спрайта от 0 до 15. Чтобы получить эти значения, используйте следующий код:
int nSprite = ((DWORD)psi->sprite & 0xFFFF);
int blend = ((DWORD)psi->sprite >> 16);
Итак, давайте теперь создадим спрайт и запишем действительный указатель на него в пресет:
#define SIZE 32
// calculate the texx and texy texture coordinates here
// based on editor's sprite number or in any other way you want
float texx = SIZE * (nSprite % 4);
float texy = SIZE * (nSprite / 4);
hgeSprite *spr = new hgeSprite(tex, texx, texy, SIZE, SIZE);
spr->SetHotSpot(SIZE/2, SIZE/2);
spr->SetBlendMode(blend);
psi->sprite = spr;
Если вы хотите использовать спрайт с други разрешением нежели 32x32,
необходимо настроить параметры fSizeStart and fSizeEnd в пресете, чтобы оставить такие
же значения размеров частиц, какие они были в пресете редактора:
psi->fSizeStart = 32.0f * psi->fSizeStart / SIZE;
psi->fSizeEnd = 32.0f * psi->fSizeEnd / SIZE;
И, наконец, давайте создадим объект системы частиц и удалим пресет из памяти, так как он нам больше
не понадобится:
hgeParticleSystem *ps = new hgeParticleSystem(psi, 50);
hge->Resource_Free(psi);
Теперь система частиц проинициализирована и готова к запуску!
Можете сохранить пресет в памяти и использовать его в дальнейшем для создания других экземпляров
этой системы частиц, вручную или с помощью hgeParticleManager.
Запуск
Теперь сделаем вызов метода FireAt объекта класса
hgeParticleSystem, чтобы стартовать систему частиц:
ps->FireAt(100, 100);
Затем используем методы Update
и Render в своей функции кадра, чтобы обновлять и отрисовывать
соответсвенно систему частиц:
ps->Update(fDeltaTime);
ps->Render();
Так же можно контролировать систему частиц с помощью методов Stop
и MoveTo, или изменяя параметры структуры ее
info вручную.
Очистка
Когда система частиц больше не нужна, систему и все ассоциированные с ней ресуры необходимо удалить:
delete ps;
delete spr;
hge->Texture_Free(tex);
Смотрите также
hgeSprite,
hgeParticleSystem,
hgeParticleManager,
Пример 03
|