Показать сообщение отдельно
Старый 08.08.2012, 19:02   #1
pepel
Мастер
 
Аватар для pepel
 
Регистрация: 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=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 
Миниатюры
Нажмите на изображение для увеличения
Название: primer.JPG
Просмотров: 934
Размер:	18.2 Кб
ID:	17300  
Вложения
Тип файла: exe test_spline_2d_blood.exe (1.26 Мб, 1050 просмотров)

Последний раз редактировалось pepel, 09.08.2012 в 13:55.
(Offline)
 
Ответить с цитированием