DizzyAge по-русски http://dizzyage.flybb.ru/ |
|
движение по прямой под произвольным углом http://dizzyage.flybb.ru/topic98.html |
Страница 1 из 1 |
Автор: | osa [ 28 ноя 2012, 00:11 ] |
Заголовок сообщения: | движение по прямой под произвольным углом |
Стандартный алгоритм передвижения предметов AIUpdateTrain работает уж очень топорно, создал свой скрипт передвижения, который позволяет передвигаться между точками по кратчайшему расстоянию под произвольным углом. Добавляем в ai.gs Код: func AIUpdateCart( idx )
{ if(idx==-1) return; if(ObjGet(idx,O_DISABLE)) return; if(!IsUpdate(ObjGet(idx,O_DELAY))) return; if(ObjGet(idx,O_STATUS)!=1) return; id2 = ObjGet(idx,O_TARGET); if(id2==0) return; idx2 = ObjFind(id2); if(idx2==-1) return; speed = ObjGet(idx2,O_WAYPOINTSPEED); //скорость по Вектору(гипотенуза) flip = ObjGet(idx2,O_WAYPOINTFLIP); x2 = ObjGet(idx2,O_X); //координата X места назначения y2 = ObjGet(idx2,O_Y); // координата Y x = ObjGet(idx,O_X); //координата X места отправления y = ObjGet(idx,O_Y); // Y ObjSet(idx,O_FLIP,flip); dx = (float)x2 - (float)x ; // длина по X dy = (float)y2 - (float)y ; // длина по Y dx2 = dx*dx; dy2 = dy*dy; dsum=(float)dx2+(float)dy2; dz =gs_sqrt((float)dsum); cosinusa = dx/dz; sinusa = dy/dz; speedx = (float)cosinusa*(float)speed; speedx = gs_round(speedx); speedy = (float)sinusa*(float)speed; speedy = gs_round(speedy); flip = ObjGet(idx2,O_WAYPOINTFLIP); x2 = ObjGet(idx2,O_X); //координата X места назначения y2 = ObjGet(idx2,O_Y); // координата Y x = ObjGet(idx,O_X); //координата X места отправления y = ObjGet(idx,O_Y); // Y ObjSet(idx,O_FLIP,flip); if(x<x2) { x+=((int)speedx); if(x>x2) x=x2; } if(x>x2) { x+=((int)speedx); if(x<x2) x=x2; } if(y<y2) { y+=((int)speedy); if(y>y2) y=y2; } if(y>y2) { y+=((int)speedy); if(y<y2) y=y2; } if(x==x2 && y==y2) // reached waypoint, change target { target = ObjGet(idx2,O_TARGET); ObjSet(idx,O_TARGET,target); } ObjSet(idx,O_X,x); ObjSet(idx,O_Y,y); } |
Автор: | osa [ 28 ноя 2012, 00:14 ] |
Заголовок сообщения: | Re: движение по прямой под произвольным углом |
Сравнение стандартного алгоритма(зеленый) с моим (красный) http://sderni.ru/156442 |
Страница 1 из 1 | Часовой пояс: UTC + 4 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |