Показать сообщение отдельно
Старый 10.05.2011, 20:51   #1
Vadimich
Нуждающийся
 
Аватар для Vadimich
 
Регистрация: 26.08.2010
Сообщений: 54
Написано 3 полезных сообщений
(для 3 пользователей)
Вопрос Организация системы частиц

Доброго времени суток, друзья! уделите, пожалуйста, немного своего драгоценного времени

Помогите пожалуйста правильно организовать вышеупомянутую.
я уже как-то писал такое, но использовал в качестве частиц отдельные спрайты... понимаю, что это изврат. читал где-то, что намного быстрее - использовать вместо отдельных Entity квады, объедененные в один Mesh, но как это сделать ума не приложу т.е. вроде создавать сёрфейсы у меня получается, но в каком массиве хранить идентификаторы каждого квада и их индивидуальные параметры, правильно трансформировать.
вот набросал небольшой примерчик (ниже). Не могли бы вы сделать его аналог с использованием объедененных квадов. Буду очень признателен за помощь

-----------------------Example:
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

cam = CreateCamera(): PositionEntity cam,0,0,-15
t = CreateTimer(60)

EmitterCreate (0,0,20) ; создание Эмиттера


Repeat
WaitTimer(t)



EmitterUpdate(); Обновление Эмиттера

UpdateWorld
RenderWorld

Flip(0)

Until KeyHit(1)
End

;================================================= ===================Functions

Type Emitter
Field interval, timer
Field x#, y#
Field entity
End Type

Type particle
Field entity
Field speed#
Field turn#
Field alpha#
End Type

Function EmitterCreate (x,y, interval)
e.Emitter = New Emitter
e\interval = interval
e\timer = e\interval
e\x = x
e\y = y
e\entity = CreateSprite(): SpriteViewMode e\entity,2: EntityAlpha e\entity,.5 ; создаем простенький эмиттер
End Function

Function EmitterUpdate ()
For e.Emitter = Each Emitter

; запуск частиц
e\timer = e\timer+1
If e\timer>e\interval
;================================================= ===================
p.particle = New particle
p\speed# = .1
p\turn = 1
p\alpha = .5
p\entity = CreateSprite(): SpriteViewMode p\entity,2
PositionEntity p\entity,e\x, e\y,0: RotateEntity p\entity, 0,0,EntityRoll (e\entity)
EntityAlpha p\entity,p\alpha
e\timer = 0
;================================================= ===================
EndIf

;обновление частиц
;================================================= ===================
For p.particle = Each particle
p\turn = p\turn+2
MoveEntity p\entity,0,p\speed,0
RotateSprite p\entity,p\turn
Next

Next
End Function
(Offline)
 
Ответить с цитированием