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] - Roboty Latające

damianxaron - 22-08-2012, 20:30
Temat postu: Roboty Latające
Witam!
Zauważyłem że transportery latające otrzymawszy komendę np. przenieś rude tytanu do huty, doleciawszy do celu będą stały w powietrzu dopóki przegrzanie silnika nie osiągnie stanu krytycznego. Można skorygować to jakąś komendą?

Edit: Przypomniało mi się. Można również przyspieszyć start? Aby nie czekał na całkowite ochłodzenie silnika tylko wziął rudę, wystartował i ewentualnie wylądował, po czym znów by poleciał.

tomangelo - 22-08-2012, 21:06

Możesz lądować poleceniem jet(-1); . Po dotarciu do celu robot opada na ziemię.
Nie wiem czy jest to możliwe w grze, ale można też skusić się o powolne zmniejszanie wysokości, wraz ze zmniejszaniem się odległości, wtedy potrzebny byłby jakiś algorytm obliczający prędkość opadania, a następnie pętla warunkowa
Kod:
if(odleglosc_do_celu <= odleglosc_przy_ktorej_robot_powinien_zaczac_ladowanie){
jet(-wynik_algorytmu);
}

Całość jednak musiałaby być na tyle inteligentna, by po drodze nie zahaczyć o inny budynek, jednak w teorii byłoby to nieco szybsze, gdyż w pierwszym rozwiązaniu robot leci poziomo do celu, po osiągnięciu celu hamuje i czeka aż prędkość wyniesie idealne zero, przez co wisi w powietrzu około 1-2 sekund i dopiero ląduje, tutaj robot poleci lotem prostym i zatrzyma się tuż przed budynkiem docelowym.
Jednak nie jestem pewien czy jest to wykonalne w grze, pomysł wpadł przed chwilą i nie mam go chwilowo jak przetestować.

damianxaron - 22-08-2012, 21:18

Pomysł niezły. Aby nie haczył o budnki można stworzyć wykrywacz używając komendy if. Ale nie jestem pewny czy da się stworzyć pętle warunkową na więcej niż 1 obiekt. I nie jestem pewien czy sama pętla o której powiedziałeś jest możliwa do stworzenia :-P . Już odpalam colobota i zabieram się za testy.
Simbax - 23-08-2012, 09:44

damianxaron napisał/a:
Ale nie jestem pewny czy da się stworzyć pętle warunkową na więcej niż 1 obiekt.


Nie wiem czy to zadziała i czy dobrze cię zrozumiałem, ale można zrobić tak:

Stwórz sobie tablicę obiektów typu int i do każdego elementu wpisz nazwę kategorii poszczególnych obiektów.

Czyli:
Kod:

int obiekty[];

obiekty[0] = TargetBot;
obiekty[1] = BotFactory;
// i tak dalej...


Potem możesz użyć funkcji radar w taki sposób:
Kod:

radar(obiekty);

Wtedy będzie szukała każdego obiektu, który został wpisany. Oczywiście dodaj do niej jeszcze pozostałe argumenty, chyba że chcesz żeby przeszukała całą mapę. Zakończy się pewnie na pierwszym znalezionym obiekcie. Skoro to funkcja, to bez problemu umieścisz ją w warunku.

Użyłem tego kiedyś w jednym z moich programów (funkcja główna): http://www.colobot.cba.pl...topic.php?t=784

Madman07 - 23-08-2012, 09:46

Walnąć tutaj regulator PID i po kłopocie ;]
Mrocza - 25-08-2012, 08:21

Madman07 napisał/a:
Walnąć tutaj regulator PID i po kłopocie ;]
No przecież! właśnie o tym myślałem. ;)

Problem ten wymaga chyba modyfikacji komendy goto. Sam fragment zniżania wysokości przed celem jest łatwy. Trudne jest pokonanie większej odległości. Wydaje mi się, że jeszcze nikomu nie udało się napisać działającego goto.

Madman07 - 25-08-2012, 10:14

Tak z ciekawości, któregoś dnia musiałbym przetestować rozwiązania typu regulator PID teraz, kiedy wiem jak to działa. Swoją drogą, kod z drugiego postu to taki regulator P, dodając człony ID można usprawnić lądowanie :)

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