быдло
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений (для 1,489 пользователей)
|
Re: Реализация леса.
Вобщем, расскрываю секрет как сделать всё просто и быстро )
;-------------- В начале программы----------------- Global idd=9000 Dim arrpalm(idd,3) Global palm=LoadMesh ("tree.b3d") ScaleEntity palm,5,5,5 For i = 1 To idd arrpalm(i,0)=CopyEntity (palm) .tray c_x=Rnd(1 , 25000) c_z=Rnd(1 , 25000) c_y=TerrainY(terrain,c_x,100,c_z) If c_y<90 Then Goto tray arrpalm(i,1)=Float(c_x) arrpalm(i,2)=Float(c_y)-3 arrpalm(i,3)=Float(c_z) PositionEntity arrpalm(i,0),arrpalm(i,1),arrpalm(i,2),arrpalm(i,3),1 RotateEntity arrpalm(i,0),0,Rnd(360),0 EntityAutoFade arrpalm(i,0),1000,1001 Next HideEntity palm ;----------------------Вызывать в теле игры, и желательно не каждый цыкл-------- Function updata_palm() xf=Rnd(1,5) Select xf Case 1 For i =1 To idd Step 1 distx=arrpalm(i,1)-EntityX(plr,1) distz=arrpalm(i,3)-EntityZ(plr,1) If arrpalm(i,0)=0 If distx>-1100 And distx<1100 If distz>-1100 And distz<1100 arrpalm(i,0)=CopyEntity (palm) PositionEntity arrpalm(i,0),arrpalm(i,1),arrpalm(i,2),arrpalm(i,3),1 RotateEntity arrpalm(i,0),0,Rnd(360),0 EntityAutoFade arrpalm(i,0),1000,1400 EndIf EndIf ElseIf arrpalm(i,0)<>0 If EntityDistance (arrpalm(i,0),plr)>1400 FreeEntity arrpalm(i,0) arrpalm(i,0)=0 Goto nexs EndIf EndIf .nexs Next Case 2 For i =1 To idd Step 2 distx=arrpalm(i,1)-EntityX(plr,1) distz=arrpalm(i,3)-EntityZ(plr,1) If arrpalm(i,0)=0 If distx>-1100 And distx<1100 If distz>-1100 And distz<1100 arrpalm(i,0)=CopyEntity (palm) PositionEntity arrpalm(i,0),arrpalm(i,1),arrpalm(i,2),arrpalm(i,3),1 RotateEntity arrpalm(i,0),0,Rnd(360),0 EntityAutoFade arrpalm(i,0),1000,1400 EndIf EndIf ElseIf arrpalm(i,0)<>0 If EntityDistance (arrpalm(i,0),plr)>1400 FreeEntity arrpalm(i,0) arrpalm(i,0)=0 Goto nexs1 EndIf EndIf .nexs1 Next Case 3 For i =1 To idd Step 2 distx=arrpalm(i,1)-EntityX(plr,1) distz=arrpalm(i,3)-EntityZ(plr,1) If arrpalm(i,0)=0 If distx>-1100 And distx<1100 If distz>-1100 And distz<1100 arrpalm(i,0)=CopyEntity (palm) PositionEntity arrpalm(i,0),arrpalm(i,1),arrpalm(i,2),arrpalm(i,3),1 RotateEntity arrpalm(i,0),0,Rnd(360),0 EntityAutoFade arrpalm(i,0),1000,1400 EndIf EndIf ElseIf arrpalm(i,0)<>0 If EntityDistance (arrpalm(i,0),plr)>1400 FreeEntity arrpalm(i,0) arrpalm(i,0)=0 Goto nexs2 EndIf EndIf .nexs2 Next Default For i =1 To idd Step 5 distx=arrpalm(i,1)-EntityX(plr,1) distz=arrpalm(i,3)-EntityZ(plr,1) If arrpalm(i,0)=0 If distx>-1100 And distx<1100 If distz>-1100 And distz<1100 arrpalm(i,0)=CopyEntity (palm) PositionEntity arrpalm(i,0),arrpalm(i,1),arrpalm(i,2),arrpalm(i,3),1 RotateEntity arrpalm(i,0),0,Rnd(360),0 EntityAutoFade arrpalm(i,0),1000,1400 EndIf EndIf ElseIf arrpalm(i,0)<>0 If EntityDistance (arrpalm(i,0),plr)>1400 FreeEntity arrpalm(i,0) arrpalm(i,0)=0 Goto nexs3 EndIf EndIf .nexs3 Next End Select End Function
Воть) у меня нормально тянет 30к (idd)деревьев на карту) можно сделать там коечто типами и ещё немного ускорить алгоритм, но это уже сами думайте
|