AI
Ostatnio zmodyfikowano 2009-05-26 19:37
Camper Temat założony przez niniejszego użytkownika |
AI » 2009-05-25 23:56:52 Teraz mam inny problem. Otóż, starałem się zrobić własną sztuczną inteligencję ponieważ innych nie rozumiałem (coś tam na forum znalazłem). Jednak to nie rusza się tak jakbym chciał, działa to tak że przeskakuje od razu do miejsca docelowego a nie jedzie do niego, no i trochę za szybkie. kod wygląda tak : f++; if( f == 50 ) { a = random( 0, 40 ); b = random( 0, 40 ); if( a < 20 ) { for( int i = 0; i < 90; i++ ) { enemy_y++; } } else { for( int i = 0; i < 90; i++ ) { enemy_y--; } } if( b < 20 ) { for( int i = 0; i < 90; i++ ) { enemy_x--; } } else { for( int i = 0; i < 90; i++ ) { enemy_x++; } } f = 0; if( enemy_x <( statek_x + 50 ) && enemy_x > statek_x && enemy_y < statek_y ) { fire = true; } else { fire = false; } }
|
|
DejaVu |
» 2009-05-26 00:59:45 To nie jest AI. To jest problem z realizacją animacji ruchu. Wiersz: for( int i = 0; i < 100; i++ ) pozycjaX++; daje de'facto taki sam efekt co: pozycjaX += 100; Takie podejście do robienia animacji jest błędne. Jeśli chcesz wykonywać animację musisz zrobić jedną pętlę główną, w której będziesz przesuwał obiekty do celu, który został wcześniej wybrany. Przykładowo dla wcześniej wspomnianej pętli: int i = 0;
if( i < 100 ) { pozycjaX++; i++; }
Uzyskasz płynną animację, która nie blokuje sceny. Jak nie trudno zauważyć - taką przysłowiową zmienną i będzie potrzebował każdy obiekt na scenie. |
|
Camper Temat założony przez niniejszego użytkownika |
» 2009-05-26 10:01:46 Niby działa ale nie do końca tak jak chciałem. Teraz obiekt kręci się w kółko w jednym miejscu zmieniając pozycję o 1 pix. A chodzi mi o to żeby obiekt losowo leciał (powiedzmy) 100px w prawo, później 100px do góry itd. w różnej kolejności. I żeby działo się to płynnie tj. żeby nie teleportował się od razu do współrzędnych o 100 px dalej tylko zmieniał swoją pozycję o 1 px aż do momentu uzyskania 100px. |
|
DejaVu |
» 2009-05-26 10:16:32 Daję temat, w którym był realizowany ruch pocisku: http://forum.ddt.pl/?Tid=1005&p=1. Skoro przeskakuje Ci obiekt to znaczy, że źle coś napisałeś. Nie chce mi się dzisiaj palcem pokazywać błędu. Myślę, że powinieneś zrobić najpierw poruszanie się obiektu strzałkami. Później zastanowić się czemu to działa dobrze (tj. rusza się dalej od obecnej pozycji). |
|
Camper Temat założony przez niniejszego użytkownika |
» 2009-05-26 17:43:15 Nie zrozumieliśmy się chyba. Piszę właśnie sztuczną inteligencję która będzie poruszała statkiem wroga i strzelała do gracza. Chciałbym aby losowo wybierało kierunek i leciało powiedzmy 100px w prawo ale płynnie a nie przeskakiwało od razu na 100 pixel. Poruszał się tak samo jak ja kiedy naciskam w prawo. Tymczasem u mnie porusza się on tak że leci 1 px w górę , później w prawo itd. itd i do tego bardzo szybko. |
|
pekfos |
» 2009-05-26 19:07:11 szybko? timer zrób. i ne losuj kierunku dopóki nie dojdzie if( timer <= 0 ) { if( t <= 0 ) { t = 2; } t--; timer = 2; } timer--; tam gdzie ustaw co ci odpowiada to wpisz np 1, 2, 3.. byle nie 99999 bo ne będzie ci się prawie poruszać:) |
|
DejaVu |
» 2009-05-26 19:37:41 Jeśli wiesz jakie ruchy ma wykonać 'gracz' to musisz je sobie zapisać np. w jakiejś tablicy i przechodzić do następnych pozycji po osiągnięciu celu. Polecam zapoznać się z STL'em, a konkretniej std::list<>. To powinno spełnić Twoje oczekiwania i jest proste w użyciu. |
|
« 1 » |