Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 
Polski Portal COLOBOTa
COLOBOT Polish Portal

Problemy [programowanie] - Recykling

DOJO - 27-02-2009, 21:57
Temat postu: Recykling
Jest pewien problem bo mam dobry skrypcik do recyklingu ale nie wychodzi on na 2 sposoby.

Czyli mniej więcej tak
1. Dojście do obiekty za pomocą funkcji goto.
2. Dojście za pomocą funkcji move i turn (wraz z direction i distance);

W pierwszym przypadku recykler dojeżdża do wraku bez problemu, ale zamiast sie zatrzymać przy wraku, próbuje na niego wjechać co uniemożliwia wykonanie kolejnej funkcji.

W drugim przypadku mogę zrobić tak:
move(distance(this.position, item.position) -3);
Ale w tedy nie będzie omijał przeszkód i będzie się obijał o wszystko co mu stanie na drodze. :roll:

Czy znacie jakiś dobry skrypcik do recyklingu?

DemoLisH - 27-02-2009, 22:27

napisalem dla ciebie funkcje:
Kod:
void object::goto2(point positionn,float dist)
{
point a;
a.z=positionn.z;
a.x=positionn.x-((positionn.x-position.x)/distance2d(position,positionn))*dist;
a.y=positionn.y-((positionn.y-position.y)/distance2d(position,positionn))*dist;
goto(a);
}


stosujesz:
goto2(pozycja.position,odleglosc);

bbiidduull - 27-02-2009, 22:28

A można by chyba zrobić tak:
1. Dać instrukcje goto
2. Dać warunek czy dystans jest mniejszy równy 1, jak tak to zatrzymaj i wykonywać dalej reszte programu

DemoLisH - 27-02-2009, 22:45

ale nie da sie zatrzymac funkcji goto
COLOBOT - 28-02-2009, 08:41

Da się. Wystarczy na początku programu wpisać errmode(0); W takim wypadku jeśli goto() nie dojedzie do obiektu to program się nie wykrzaczy tylko będą się wykonywać kolejne instrukcje (wtedy można sprawdzać, czy pozycja od obiektu jest już wystarczająca). Tylko jest jedna wada, że robot będzie stukał jakąś minutę w ten wrak zanim instrukcja goto() się zakończy.
DOJO - 28-02-2009, 12:29

Dzięki! Teraz działa! :mrgreen:

Powered by phpBB modified by Przemo & WRIM © 2003 phpBB Group