Использование пресетов Редактора Систем Частиц в играх

Редактор сохраняет свои пресеты в файлы 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