Мастер
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений (для 2,526 пользователей)
|
нужна помощь по типам(эффект молнии)
Чето начал писать функцию для молнии . ну или растекающейся капли, и встал в ступор когда решил сделать "ответвления"
нужно както сохранять информацию о номере ветвлений в функции create_spline() пытался через массив отдельный сделать . но чето понимаю что не то . не получается вобщем. помогите плз
Нужно чтоб каждые допустим 6 шагов создавалась новая ветка(причем 6 шагов для каждой отдельно взятой ветви)
Вобщем нужно както считать шаги для каждой ветки
Может отдельным типом запилить, чет ваще незнаю=(
*неудачный код закоментил"
Прикрепил картинку как должно быть и ехе того что получается покачто...
код:

Graphics 640,480,16,2
SetBuffer BackBuffer ()
Type spline
Field x#,y#,new_x#,new_y#,num%,direction#,speed#,velosity#,end_spline%,set_direction%,branch%,num_branch%
End Type
create_spline(300,20)
create_spline(130,20)
create_spline(160,20)
Global last_direction#,set_direction%,last_num%,branch%
Global number_line[30]
;_________________________________________________________________________________+
Repeat
SeedRnd MilliSecs()
update_spline()
For s.spline=Each spline
;Text 0,0,s\branch
Next
Text 0,0,number_line[0]
Flip
Cls
Until KeyDown(1)
;_________________________________________________________________________________|
Function create_spline(x,y,start=0,num_branch%=0)
s.spline=New spline
s\x=X
s\y=y
s\direction=Rnd(30,140)
s\speed=2
If start s\direction=Rnd(20,150): s\branch=branch: ;:number_line[num_branch]=0
;num_branch=s\branch
;If num_branch<1 number_line[num_branch]=number_line[num_branch]+1
End Function
Function update_spline(dist#=16,degradation%=4)
For s.spline =Each spline
;Если это не конец сплайна до движемся по рандомному углу
If s\end_spline=0
If s\new_x=0 s\new_x=s\x: If s\new_y=0 s\new_y=s\y
s\new_x=s\new_x+Cos(s\direction)*s\speed
s\new_y=s\new_y+Sin(s\direction)*s\speed
End If
If last_direction<>0
;last_direction
End If
dx#=s\x-s\new_x
dy#=s\y-s\new_y
local_dist#=Sqr(dx^2+dy^2)
;If number_line[s\branch]>5 create_spline(s\new_x,s\new_y):branch=branch+1
;Если дистанция больше установленной, останавливаем движение
If s\end_spline=0 And local_dist>dist
s\end_spline=1
;last_direction=s\direction
create_spline(s\new_x,s\new_y,s\branch)
EndIf
Line s\x,s\y,s\new_x,s\new_y
Next
End Function
Последний раз редактировалось pepel, 09.08.2012 в 13:55.
|