Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > Полезные функции

Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново...

Ответ
 
Опции темы
Старый 04.09.2005, 21:38   #1
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Смех

Вот пример простого взрыва на Блиц

Graphics3D 1024,768,32,1
SetBuffer BackBuffer()

Type Expl

Field x#
Field y#
Field z#

Field PHandle%[200]
Field PAlpha#[200]
Field Paspeed#[200]
Field PSpeed#[200]

Field SHandle%[2]
Field Ssspeed#[2]
Field Saspeed#[2]

Field SAlpha#[2]
Field SScale#[2]

End Type


camera=createcamera()
PositionEntity camera,0,0,-100

SeedRnd millisecs()


time=millisecs()

ex=1

Repeat

ex=ex-1
If ex=0 Then
CreateExplosion(rnd(-10,10),rnd(-10,10),rnd(-10,10),rnd(5,20))
ex=100
EndIf

UpdateExplosion()

RenderWorld

J=0
For Explosion.expl=each expl:J=J+1:Next
Text 0,0,"Существует взрывов "+str(j)

Flip

While MilliSecs()-time<1000/100.0:wend

Until KeyHit(1)
End

Function CreateExplosion(Xp#,Yp#,Zp#,Power%)

Explosion.Expl= New expl

Explosion\x=Xp
Explosion\y=Yp
Explosion\y=Yp

Explosion\SHandle[0]=createsphere()
PositionEntity Explosion\SHandle[0],Xp,Yp,Zp
Explosion\Ssspeed[0]=Power*0.1
Explosion\Saspeed[0]=rnd (0.05,0.08)
Explosion\SAlpha[0]=1
Explosion\SScale[0]=0.1
ScaleEntity Explosion\SHandle[0],Explosion\SScale[0],Explosion\SScale[0],Explosion\SScale[0]
EntityColor Explosion\SHandle[0],rnd(200,255),rnd(0,100),rnd(0,100)

Explosion\SHandle[1]=createsphere()
PositionEntity Explosion\SHandle[1],Xp,Yp,Zp
Explosion\Ssspeed[1]=Power*0.06
Explosion\Saspeed[1]=rnd (0.05,0.08)
Explosion\SAlpha[1]=1
Explosion\SScale[1]=0.1
ScaleEntity Explosion\SHandle[1],Explosion\SScale[0],Explosion\SScale[0],Explosion\SScale[0]
EntityColor Explosion\SHandle[1],rnd(200,255),rnd(200,255),rnd(0,100)

For i=0 To 200
Explosion\PHandle[i]=Createsphere()
PositionEntity Explosion\PHandle[i],Xp,Yp,Zp
RotateEntity Explosion\PHandle[i],rnd(-180,180),rnd(-180,180),rnd(-180,180)
Sc#=rnd(0,Power*0.15)
ScaleEntity Explosion\PHandle[i],Sc,Sc,Sc
EntityColor Explosion\PHandle[i],rnd(200,255),rnd(100,255),rnd(0,50)
Explosion\PAlpha[i]=rnd(0.9,1)
Explosion\Paspeed[i]=rnd(0.94,0.999)
Explosion\PSpeed[i]=rnd(Power*0.01,Power*0.2)
Next

End Function



Function UpdateExplosion()

For Explosion.expl = Each expl

ExplosionDeleteFlag#=0

For i=0 To 1
Explosion\SScale[i]=Explosion\SScale[i]+Explosion\Ssspeed[i]
Explosion\Ssspeed[i]=Explosion\Ssspeed[i]*0.956
If Explosion\Ssspeed[i]<0.00001 Then Explosion\Ssspeed[i]=0
Explosion\SAlpha[i]=Explosion\SAlpha[i]-Explosion\Saspeed[i]
Explosion\Saspeed[i]=Explosion\Saspeed[i]*0.956
If Explosion\SAlpha[i]<0.00001 Then Explosion\SAlpha[i]=0
ScaleEntity Explosion\SHandle[i],Explosion\SScale[i],Explosion\SScale[i],Explosion\SScale[i]
EntityAlpha Explosion\SHandle[i],Explosion\SAlpha[i]
ExplosionDeleteFlag=ExplosionDeleteFlag+Explosion\SAlpha[i]
Next


For i=0 To 200
MoveEntity Explosion\PHandle[i],0,0,Explosion\PSpeed[i]
Explosion\PSpeed[i]=Explosion\PSpeed[i]*0.956
If Explosion\PSpeed[i]<0.00001 Then Explosion\PSpeed[i]=0
Explosion\PAlpha[i]=Explosion\PAlpha[i]*Explosion\Paspeed[i]
EntityAlpha Explosion\PHandle[i],Explosion\PAlpha[i]
Explosion\PAlpha[i]=Explosion\PAlpha[i]*0.956
If Explosion\PAlpha[i]<0.00001 Then Explosion\PAlpha[i]=0
ExplosionDeleteFlag=ExplosionDeleteFlag+Explosion\PAlpha[i]
Next

If ExplosionDeleteFlag#=0
For i=0 To 200
FreeEntity Explosion\PHandle[i]
Next
For i=0 To 1
FreeEntity Explosion\SHandle[i]
Next
Delete Explosion
EndIf

Next

End function
функция CreateExplosion(Xp#,Yp#,Zp#,Power%) где первые три значения - координаты, последнее - размер взрыва...

Ессно вместо сфер можно какиенить объекты кусков намутить и вместо EntityColor какуюнить текстуру, но это уже дело фантазии...
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 04.09.2005, 22:36   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
SeedRnd(MilliSecs())

Const count_sphere=24
Const count_trash=60
Const alpha_v#=0.003

Type boom
Field pivot
Field spheres[count_sphere]
Field size#[count_sphere]
Field alpha#[count_sphere]
Field time_update
Field trash[count_trash]
Field vx#[count_trash]
Field vy#[count_trash]
Field vz#[count_trash]
Field rvx#[count_trash]
Field rvy#[count_trash]
Field rvz#[count_trash]
Field alpha2#[count_trash]

Field count_sphereL
Field count_trashL
Field alpha_v#
End Type

Function create_Explosion(x#,y#,z#,power#)
Local max_rot#=50
Local max_v#=0.07*power#
Local tarsh_p#=1
b.boom=New boom
b\pivot=CreatePivot()
PositionEntity b\pivot,x,y,z,True

b\count_sphereL=power#*2
b\count_trashL=power#*10
b\alpha_v#=0.0029*(1/power#)

If b\count_sphereL>count_sphere b\count_sphereL= count_sphere
If b\count_trashL>count_trash b\count_trashL= count_trash

For is=1 To b\count_sphereL
b\spheres[is]=CreateSphere(8,b\pivot)
b\size[is]=0.0001
b\alpha[is]=1
Next
For is=1 To b\count_trashL
b\trash[is]=CreateCube()
x#=Rnd(0,tarsh_p*0.3)
y#=Rnd(0,trash_p-x#)
z#=Rnd(0,trash_p-x-z#)
ScaleEntity b\trash[is],x,y,z,True
b\rvx[is]=Rnd(0,max_rot#)
b\rvy[is]=Rnd(0,max_rot#)
b\rvz[is]=Rnd(0,max_rot#)

b\vx[is]=Rnd(-max_v,max_v)
b\vy[is]=Rnd(0,max_v)
b\vz[is]=Rnd(-max_v,max_v)

EntityColor b\trash[is],100,100,100
b\alpha2[is]=1
Next
b\time_update=MilliSecs()
Return Handle(b)
End Function
 
Function update_Explosions()
Local min_dist_sp#=10
Local grav#=0.0001
For b.boom=Each boom
new_time=MilliSecs()
delta_time=new_time-b\time_update
b\time_update=new_time
For is=1 To b\count_sphereL
If b\spheres[is]
b\size[is]=b\size[is]+delta_time*0.1
b\alpha[is]=b\alpha[is]-delta_time*b\alpha_v#

ScaleEntity b\spheres[is],b\size[is],b\size[is],b\size[is],True
If b\alpha[is]>0
EntityAlpha b\spheres[is],b\alpha[is]
EndIf
If b\size[is]<min_dist_sp# bExit=True
If b\alpha[is]<=0 FreeEntity b\spheres[is]:b\spheres[is]=0
If bExit Exit
EndIf
Next
For is=1 To b\count_trashL
If b\trash[is]
TurnEntity b\trash[is],b\rvx[is]*delta_time,b\rvy[is]*delta_time,b\rvz[is]*delta_time,True
TranslateEntity b\trash[is],b\vx[is]*delta_time,b\vy[is]*delta_time,b\vz[is]*delta_time,True
EntityAlpha b\trash[is],b\alpha2[is]
b\alpha2[is]=b\alpha2[is]-delta_time*b\alpha_v#*0.1
b\vy[is]=b\vy[is]-grav#*delta_time
If b\alpha2[is]<=0 FreeEntity b\trash[is]:b\trash[is]=0
EndIf
Next
Next
End Function
;_____________________________
;=MAIN LOOP
Graphics3D 800,600,32
Global camera=CreateCamera()
MoveEntity camera,0,3,-30
Global light=CreateLight()
Global plane=CreatePlane()
EntityColor plane,200,200,0



While Not KeyHit(1)
;@@@@@@@@@@@@@@@@@@@
If MouseHit(1) create_explosion(0,3,40,1.5)
;@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@
update_Explosions()
;@@@@@@@@@@@@@@@@@@@@@@@

RenderWorld
Flip
Wend
End
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 04.09.2005, 22:38   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
power от 1 и выше, дробное
если будешь задавать более 6, то увеличь константы
Const count_sphere=24
Const count_trash=60
можно и так оставить, но эффекта должного не будет
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взрыв (Вооомм) Petrofan 3D-программирование 8 11.01.2010 15:11
Ядерный взрыв Mark Castle 3D-программирование 24 03.03.2009 01:05
Взрыв бомбочки Fant 3D-программирование 12 04.09.2007 15:40
Ядерный взрыв HolyDel 3D-программирование 18 25.06.2007 12:30


Часовой пояс GMT +4, время: 17:37.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com