IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
Дождь, ..функция..
versus
сообщение 17.3.2005, 23:37
Сообщение #1


Digital Mystery
***

Группа: Пользователи
Сообщений: 802
Регистрация: 1.9.2004
Из: Санкт-Петербург
Пользователь №: 9



Как-то на форуме спрашивали про погодные эффекты. Вот решил выложить свою функцию дождя. smile.gif Во всех примерах, которые я видел, дождь создаётся с помощью объектов, перемещаемых по y координате. Мне этот способ кажется не очень реалистичным. Предлагаю свой вариант, плюс ещё и снежок (использовался во втором конкурсе Geo). Тут при наступлении нового дня (когда new=1), происхожит рэндом осадков, его свойств и его же продолжительности.

Кусок кода до цикла.
Код
'Подготовка объектов, изображений.
'Нужно загрузить звуки, где 3-звук грома, 1-звук дождя, 4-звук вьюги
load image "images/snow.jpg",10,1
for s=10 to 110
make object plain s,.5,.5
ghost object on s
hide object s
set object s,1,1,1,1,0,0,0
next s

Также нужные переменные -
xr# - угол наклона дождя
rsc - длина капель (50 - 2.5, 100 - 5, 200 - 10)
ssc - размер снижинок
rsomax - сила дождя
rso - громкость звука дождя
sso - громкость звука вьюги
smax# - сила снега (мин - 15, макс - 100)
С помощью этих переменных я варьировал тип снега и дождя в зависимости от месяца. Вот пример, а заодно и управление осадками (кусок кода в цикле):
Код
`Дождь````````````````````````````
event#=rnd(100.0)
if new=0 and winter=0 and n#(1)=0
ev=1
'Рэндом свойств дождя в зависимости от месяца
if m>2 and m<4 then eventmax=50:rmax=30:tmax=8
if m>3 and m<8 then eventmax=20:rmax=90:tmax=0
if m>7 then eventmax=70:rmax=50:tmax=12
if event#<eventmax then timeb#=rnd(24.0):time#=tmax+rnd(10.0):rsomax=rmax+rnd(100-rmax):rsc=rsomax*5:xr#=rnd(45)
endif
`Снег
if winter=1 and new=0 and n#(2)=0
ev=2
`Рэндом свойств снега в зависимости от месяца
if m=11 then eventmax=50:smax=30:tmax=2
if m>3 and m<8 then eventmax=40:smax=50:tmax=4
if m>7 then eventmax=70:smax=80:tmax=12
if event#<eventmax then timeb#=rnd(24.0):time#=tmax+rnd(10.0):smax#=smax+rnd(100-smax):ssc=smax#*2
endif
`Обработка процесса выпадения осадков
if time#>0
if h#>=timeb# and n#(ev)=0 then n#(ev)=1:tr=1
if tr#>=time# then n#(ev)=-1:time#=0:tr#=0:tr=0
endif

А это код отвечающий за создание эффектов. Делайте на него gosub. xo# и так далее - положение камеры или героя.
Код
if n#(1)<>0
'Управление громом
if g#<1.0 then gr=rnd(200):gr2=rnd(100)/10:if gr2<3 then gr2=3
if n#(1)>0 then g#=g#+0.5:if g#>200 then g#=.0
if g#>gr-gr2 and g#<gr-gr2/2 then grom=1 else grom=0
if g#=int(gr)
 set sound volume 3,gr2*10
 if sound playing(3)=0  then play sound 3
endif
'Сам дождь!!!
set sound volume 1,rso
if sound looping(1)=0 then loop sound 1
for s=10 to 110
xrotate object s,xr#
position object s,xo#+rnd(100)+(-1*rnd(100)),yo#+rnd(50),zo#+rnd(100)+(-1*rnd(100))
rotat(s)
next s
if n#(1)=1 then show object rso+10:color object rso+10,rgb(158,189,241):scale object rso+10,10,rsc,100:rso=rso+1:if rso=rsomax then n#(1)=2
if n#(1)<0
 hide object rso+10
 rso=rso-1
 if rso<0 then n#(1)=0:rso=0
endif
else
if sound looping(1)=1 then stop sound 1
endif
'Снег
if n#(2)<>0
if sso<smax# then ss=sso else ss=smax#
set sound volume 4,ss
if sound looping(4)=0 then loop sound 4
if smax#>50 and n#(3)=0 then n#(3)=1
for s=10 to 110
y#(s)=y#(s)-smax#/30
if y#(s)<=-20 then y#(s)=yo#+50:x#(s)=xo#+rnd(150)+(-1*rnd(150)):z#(s)=zo#+rnd(150)+(-1*rnd(150))
position object s,x#(s)+smax#/4*cos(2*y#(s)),y#(s),z#(s)+5*cos(5*y#(s))
rotat(s)
next s
if n#(2)=1
 for s=10 to 110
 x#(s)=xo#+rnd(150)+(-1*rnd(150))
 y#(s)=yo#+rnd(50)
 z#(s)=zo#+rnd(150)+(-1*rnd(150))
 next s
 n#(2)=2
endif
if n#(2)=2 then show object sso+10:texture object sso+10,10:scale object sso+10,ssc,ssc,100:sso=sso+1:if sso=100 then n#(2)=3
if n#(2)<0
 hide object sso+10
 sso=sso-1
 if sso<0 then n#(2)=0:sso=0
 if n#(3)>0 then n#(3)=0
endif
else
if sound looping(4)=1 then stop sound 4
endif

А это функция поворота плэинов на камеру.
Код
`Разворот объекта на камеру
function rotat(n)
yrotate object n,wrapvalue(camera angle y())
endfunction

Вот. Всё несколько сумбурно (писалось год назад), да может и не заработать с первого раза. Но некотоым, думаю, будет полезно.. biggrin.gif покапатся в этом и улучшить... biggrin.gif


--------------------
:: exclusive reality for you ::

фрОМ раШа виЗ пАнк
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 21.9.2017, 22:39
 X 
Ссылки на работы форумчан:
1. Cайт по использованию 3D технологий
в образовании

2. 15 Defense. Underwater Battle

3. GlaZ в Steam Greenlight