Мастер
Регистрация: 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.
|