|
FAQ Туториалы и часто задаваемые вопросы |
04.09.2005, 22:47
|
#1
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
ракета в полёте + пламя из сопла
Выкладываю по просьбе одного товарища.
Type snar
Field entity%
Field fire_entity%
Field time%
End Type
Function create_snar()
s.snar=New snar
s\entity=CreateCylinder()
s\fire_entity=CreateSphere()
RotateEntity s\entity,0,0,90
ScaleEntity s\fire_entity,.4,.4,.4
PositionEntity s\fire_entity,1.5,0,0
RotateEntity s\fire_entity,0,-90,0
EntityParent s\fire_entity,s\entity
NameEntity s\entity,Handle(s)
Return Handle(s)
End Function
Function update_snr()
For s.snar=Each snar
If MilliSecs()-s\time>=5
create_fire_sprite(s\fire_entity)
s\time=MilliSecs()
EndIf
Next
End Function
;__________________________________________________
Type fire_sprite
Field entity%
Field time%
Field alpha#
Field size#
End Type
Function create_fire_sprite(parent)
f.fire_sprite=New fire_sprite
f\entity=CopyEntity(sprite)
RotateEntity f\entity,EntityPitch(parent,True),EntityYaw(parent,True),EntityRoll(parent,True)
PositionEntity f\entity,EntityX(parent,True),EntityY(parent,True),EntityZ(parent,True)
omega#=Rnd(0,359)
k#=0.2
MoveEntity f\entity,Cos(omega)*k#,Sin(omega)*k#,0
f\alpha#=1
f\size#=2
f\time=MilliSecs()
Return Handle(f)
End Function
Function update_fire_sprite()
For f.fire_sprite=Each fire_sprite
new_time=MilliSecs()
delta=new_time-f\time
f\time=new_time
f\alpha#=f\alpha#-delta*0.01
f\size#=f\size#-delta*0.005
MoveEntity f\entity,0,0,0.03*delta
EntityAlpha f\entity,f\alpha#
ScaleSprite f\entity,f\size,f\size
If f\alpha<=0
FreeEntity f\entity
Delete f
EndIf
Next
End Function
;_____________________________
;=MAIN LOOP
Graphics3D 800,600,32
Global camera=CreateCamera()
MoveEntity camera,0,0,-30
Global light=CreateLight()
Global sprite=LoadSprite("sprite.bmp"):HideEntity sprite
;__create 1
snar_ptr=create_snar()
s.snar=Object.snar(snar_ptr)
s_ent=s\entity%
PositionEntity s_ent,0,2,0
;__create 2
snar_ptr=create_snar()
s.snar=Object.snar(snar_ptr)
s_ent2=s\entity%
;__create 3
snar_ptr=create_snar()
s.snar=Object.snar(snar_ptr)
s_ent3=s\entity%
RotateEntity s_ent3,0,90,90
;;;==
time=MilliSecs()
While Not KeyHit(1)
new_time=MilliSecs()
delta=new_time-time
time=new_time
MoveEntity s_ent2,0,0.07*delta,0
TurnEntity s_ent2,0.07*delta,0,0
MoveEntity s_ent3,0,0.07*delta,0
TurnEntity s_ent3,0.07*delta,0,0
update_snr()
update_fire_sprite()
RenderWorld
Flip
Wend
End
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
04.09.2005, 22:48
|
#2
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Вот это надо кинуть в папку с проектом
Ещё неплохо бы SeedRnd приписать
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
24.08.2006, 22:38
|
#3
|
Знающий
Регистрация: 08.06.2006
Сообщений: 304
Написано 3 полезных сообщений (для 8 пользователей)
|
Re: ракета в полёте + пламя из сопла
Спасибо. Очень пригодилось.
|
(Offline)
|
|
24.08.2006, 23:53
|
#4
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Re: ракета в полёте + пламя из сопла
Type snar
Field entity%
Field fire_entity%
Field time%
Field smok
End Type
Function create_snar()
s.snar=New snar
s\entity=CreateCylinder()
s\fire_entity=CreateSphere()
RotateEntity s\entity,0,0,90
ScaleEntity s\fire_entity,.4,.4,.4
PositionEntity s\fire_entity,1.5,0,0
RotateEntity s\fire_entity,0,-90,0
EntityParent s\fire_entity,s\entity
NameEntity s\entity,Handle(s)
Return Handle(s)
End Function
Function update_snr()
For s.snar=Each snar
If MilliSecs()-s\time>=5
create_fire_sprite(s\fire_entity)
s\smok=s\smok+1
If s\smok>Rand(2,5)
s\smok=0
create_smok_sprite(s\fire_entity)
EndIf
s\time=MilliSecs()
EndIf
Next
End Function
;__________________________________________________
Type fire_sprite
Field entity%
Field time%
Field alpha#
Field size#
Field stat
End Type
Function create_fire_sprite(parent)
f.fire_sprite=New fire_sprite
f\entity=CopyEntity(sprite)
RotateEntity f\entity,EntityPitch(parent,True),EntityYaw(parent,True),EntityRoll(parent,True)
PositionEntity f\entity,EntityX(parent,True),EntityY(parent,True),EntityZ(parent,True)
omega#=Rnd(0,359)
k#=0.2
MoveEntity f\entity,Cos(omega)*k#,Sin(omega)*k#,0
f\alpha#=1
f\size#=2
f\time=MilliSecs()
Return Handle(f)
End Function
Function create_smok_sprite(parent)
f.fire_sprite=New fire_sprite
f\stat=1
f\entity=CopyEntity(sprite_smok)
EntityColor f\entity,140,140,140
RotateEntity f\entity,EntityPitch(parent,True),EntityYaw(parent,True),EntityRoll(parent,True)
PositionEntity f\entity,EntityX(parent,True)+Rnd(-1,1),EntityY(parent,True)+Rnd(-1,1),EntityZ(parent,True)+Rnd(-1,1)
MoveEntity f\entity,0,0,5
f\alpha#=.5
f\size#=Rnd(3,4)
f\time=MilliSecs()
Return Handle(f)
End Function
Function update_fire_sprite()
For f.fire_sprite=Each fire_sprite
new_time=MilliSecs()
delta=new_time-f\time
f\time=new_time
If f\stat=0
f\alpha#=f\alpha#-delta*0.01
f\size#=f\size#-delta*0.005
MoveEntity f\entity,0,0,0.03*delta
Else
f\alpha#=f\alpha*.97
f\size#=f\size*1.02
EndIf
EntityAlpha f\entity,f\alpha#
ScaleSprite f\entity,f\size,f\size
If f\alpha<.1
FreeEntity f\entity
Delete f
EndIf
Next
End Function
;_____________________________
;=MAIN LOOP
Graphics3D 800,600,32
Global camera=CreateCamera()
CameraClsColor camera,0,100,155
MoveEntity camera,0,0,-30
Global light=CreateLight()
Global sprite=LoadSprite("sprite.bmp"):HideEntity sprite
Global sprite_smok=LoadSprite("sprite.bmp",3)
HideEntity sprite_smok
;__create 1
snar_ptr=create_snar()
s.snar=Object.snar(snar_ptr)
s_ent=s\entity%
PositionEntity s_ent,0,2,0
;__create 2
snar_ptr=create_snar()
s.snar=Object.snar(snar_ptr)
s_ent2=s\entity%
;__create 3
snar_ptr=create_snar()
s.snar=Object.snar(snar_ptr)
s_ent3=s\entity%
RotateEntity s_ent3,0,90,90
;;;==
time=MilliSecs()
While Not KeyHit(1)
new_time=MilliSecs()
delta=new_time-time
time=new_time
MoveEntity s_ent2,0,0.07*delta,0
TurnEntity s_ent2,0.07*delta,0,0
MoveEntity s_ent3,0,0.07*delta,0
TurnEntity s_ent3,0.07*delta,0,0
update_snr()
update_fire_sprite()
RenderWorld
Flip
Wend
End
Побаловался 10 мин.
Теперь с дымом
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.11.2006, 17:52
|
#5
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: ракета в полёте + пламя из сопла
Тут у меня спрашивают, что делать: при увеличении сокрости полёта снаряда - нарушается целостность огня, да и вообще - портится визуальное восприятие. Ответ универсальный и единственный - подбирайте коэффициенты: масштаб,изменение масштаба, скорость спрайта и изменения коэффициентов, кол-во спрайтов...
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:02.
|