Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

AI

Ostatnio zmodyfikowano 2009-05-26 19:37
Autor Wiadomość
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 :
C/C++
f++;
if( f == 50 ) { //zmniejszacz prędkości
    a = random( 0, 40 ); //randomy
    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; }
}
P-7184
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:
C/C++
int i = 0; //przed pętlę główną
//...
//w pętli głównej:
if( i < 100 )
{
    pozycjaX++;
    i++;
} //if
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.
P-7185
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.
P-7186
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).
P-7187
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.
P-7198
pekfos
» 2009-05-26 19:07:11
szybko? timer zrób. i ne losuj kierunku dopóki nie dojdzie
C/C++
if( timer <= 0 ) { //timer główny
    if( t <= 0 ) { //timer losowania
        //randomy
        t = 2; //ustaw tu cos co ci odpowiada
    }
    t--;
    timer = 2; //ustaw co ci odpowiada
}
timer--;
tam gdzie ustaw co ci odpowiada to wpisz np 1, 2, 3..
byle nie 99999 bo ne będzie ci się prawie poruszać:)
P-7204
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.
P-7206
« 1 »
  Strona 1 z 1