Даже в двумерных движках в наше время все труднее обойтись без частиц, а в трехмерных это просто невозможно. Делать взрывы и тому подобные эффекты спрайтами или специальными моделями и некрасиво, и неудобно. Из этой статьи вы узнаете, как с помощью пакета ЛКИ-Creator делать частицы; только не забудьте переустановить пакет. Инструкции по его переустановке вы найдете на нашем диске — в предыдущих статьях рубрики.
Метод Emit
Для излучения частиц в класс TLKI3dGameWorld добавлен метод:
Procedure Emit(N : integer; ChangeDest : TProc; Shape : TLKI3dParticleShape; DirY, DirZ, p1, p2 : single; Pic : integer; x, y, z, spd : single; deathtime : single; pa, pe : integer); |
Разберем значение его параметров.
N — количество излучаемых частиц.
ChangeDest — процедура, управляющая движением частиц после излучения. Для начала можно использовать простое движение — LightMutate.
Shape — форма излучения. Принимает те же значения, что в двумерном пакете: psCircle, psCone, psLine, psBurst. Значение их — то же самое, но с «поправкой на трехмерность»: Circle — не круг, а шар, Line — не полоса, а цилиндр, и так далее.
DirY, DirZ — направление (углы к осям Y и Z, как обычно).
P1, P2 — максимальное и минимальное расстояние до частиц (в момент выпускания) от точки излучения.
Pic — номер модели частицы. Как обычно, модель частицы надо сперва загрузить, объявив ее в списке моделей. Частица — это TLKIMesh, который задается, как и прочие объекты в ЛКИ-Creator 3D, в виде текстового .Х-файла. Чаще всего тут вполне сгодится что-то вроде шарика (низкополигонального!) или даже тетраэдра, иногда стоит взять что-то похитрее. Но в любом случае частицы «берут числом», форма отдельно взятой частицы имеет меньше значения.
X, Y, Z — координаты излучателя.
Spd — скорость полета частицы.
DeathTime — время жизни частицы (по прошествии которого она уничтожается). В миллисекундах.
PA, PE — дополнительные параметры для процедуры движения.
На примере с дельфином, который лежит на нашем диске (см. рисунок) вы можете увидеть работу этой процедуры (а также двумерных компонентов, описанных в предыдущей статье).
C непривычки подгонять параметры частиц в своей программе бывает очень и очень непросто. Чтобы «пощупать», как и на что они влияют, мы выкладываем на наш диск программу Emitter, которая позволяет оценить, на что похож поток частиц при разных значениях всех параметров, включая форму и текстуру частицы.
Спрайты
Как оказалось, статических двумерных компонентов все же недостаточно: многим нужны динамические спрайты, подобные тем, что работают в двумерной версии пакета.
В новом варианте пакета для этого появилcя класс TLKI3dSprite. Устроен он абсолютно так же, как и в двумерном пакете; координаты для него соответствуют экранным (а не трехмерным), он отображается всегда поверх трехмерного экрана.
Вам, скорее всего, понадобятся два метода этого класса.
Создание спрайта:
constructor Create(FName : TFilename; Form : TLKI3dForm; NPhases : integer = 1; Rotable : boolean = false; QuantumAngle : integer = 10); |
Первый параметр — имя файла с картинкой, второй — имя формы, в которой вы работаете. Остальные параметры необязательны; NPhases нужно задать, если у вас в спрайте несколько фаз, а если предполагается его вращать — то нужно поставить в true параметр Rotable и указать в следующем параметре минимальный угол поворота (в градусах).
Рисование:
procedure Draw(x, y : integer; phase : integer = 1; angle : integer = 0); |
Параметры — координаты (экранные), номер фазы, угол поворота.
На самом деле этим не исчерпываются изменения, сделанные нами в пакете. Многое подверглось правке или оптимизации; а в ближайшее время вас ожидает описание процедур проверки столкновения объектов и выбора объекта на экране при помощи мыши.
Чистого вам кода!