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

[Allegro] strzał w strony myszy

Ostatnio zmodyfikowano 2009-06-01 22:20
Autor Wiadomość
DejaVu
» 2009-06-01 00:15:03
To nie mój program - ja go tylko poprawiałem, żeby pocisk latał pod kątem ze stałą prędkością i w dowolnym kierunku. Nie chce mi się tłumaczyć programu, który działa. Możesz go sam przeanalizować. Nie ma tam niczego skomplikowanego poza wzorami trygonometrycznymi, które wynikają z matematyki, a nie z programowania.
P-7342
Camper
Temat założony przez niniejszego użytkownika
» 2009-06-01 14:45:26
Poradziłem sobie z tym kodem i strzelanie faktycznie działa, jednak że pomyślałem że to świetny code i moge go wykorzystać do poruszania ludzikiem(komputerowym graczem) w róźne miejsca (Sztuczna inteligencja).

Przekształciłem kod jednak nie wiedzieć czemu nie działa...
Po wylosowaniu pierwszych współrzędnych ludzik zachowuje się jak strzał (tj. leci do końca ekranu) a mnie zależy aby losował następne współrzędne i zmierzał do nich.
Kod wygląda tak :

C/C++
//AI
if( chodzenie == false ) {
    a = random( 0, 800 );
    b = random( 0, 600 );
}


if( chodzenie == false ) {
    if(( a + b ) > 0 )
    {
        // play_sample(dzwiek, 255,127,1000,0);
        ib2x = bot_x;
        ib2y = bot_y;
        celb2x = a;
        celb2y = b;
        deltab2X = ib2x - celb2x;
        deltab2Y = ib2y - celb2y;
        chodzenie = true;
    } }

if(( deltab2Y ) == 0 )
{
    katb2 = 0;
} else
{
    katb2 = atan(( deltab2X ) /( deltab2Y ) );
} //else

if( deltab2Y >= 0 )
{
    katb2 += M_PI;
} //if


if( chodzenie == true ) {
   
    if( ib2x != celb2x ) //teoretycznie chciałem aby
    { ib2x += sin( katb2 ) * predkosc2; } //zmieniał położenie na osi x
    //i jak dotrze do wyznaczonego x
    //zmieniał położenie y i jak
    //dojdzie to oznaczył chodzenie
    // na false i losowal nowe współrzędne     
   
    if( ib2x == celb2x )
    {
        if( ib2y != celb2y )
        {
            ib2y += cos( katb2 ) * predkosc2; }
       
        if( ib2y == celb2y )
        { chodzenie = false; }
    }
}





bot_x = ib2x;
bot_y = ib2y;

draw_sprite( bufor, bot, bot_x, bot_y );
P-7352
DejaVu
» 2009-06-01 17:36:10
To jest bardzo proste. Napisałem w tamtym poście żeby autor programu poprawił sobie, żeby obiekt się zatrzymywał jak doleci do celu. Obecnie nie zatrzymuje się dlatego, że nie trafia dokładnie w punkt (pomimo, iż przez niego przelatuje). wyobraź sobie: masz obiekt początkowo w punkcie (0,0). Obiekt ten chcesz aby przemiścił się do punktu (1,1). Obiekt porusza się z prędkością 1. Oczywiste jest, że przekątna wynosi 1*sqrt(2). Tak więc w ruchu drugim przeleci przez punkt. Powinien być warunek, że jeśli odległość do celu jest mniejsza niż prędkość, to następuje przypisanie:
pozycja_celu = pozycja_punktu;
W tym wypadku warunek zadziała:
C/C++
if( pozycja_celu == pozycja_punktu )
{
    //tu ustawić nowy cel
} //if
P-7360
Camper
Temat założony przez niniejszego użytkownika
» 2009-06-01 20:52:09
Ok, zatrzymywanie i zmierzanie do następnego punktu działa... jednak są też problemy ;p

Otóż, postać dziwnie się teleportuje czasami do jakich współrzędnych nie wiedomo skąd.
Po drugie Random co włączenie programu losuje te same liczby (tj. e kolejności np. 400, później 753, i tak samo po ponownym uruchomieniu programu.)
Znam to już Pascala i chyba Delphi, ale czy nie da się czegoś z tym zrobić ?

Kod :

C/C++
//AI
if( chodzenie == false ) {
    a = random( 0, 800 );
    b = random( 0, 600 );
   
}


if( chodzenie == false ) {
    if(( a + b ) > 0 )
    {
        // play_sample(dzwiek, 255,127,1000,0);
        ib2x = bot_x;
        ib2y = bot_y;
        celb2x = a;
        celb2y = b;
        deltab2X = ib2x - celb2x;
        deltab2Y = ib2y - celb2y;
        chodzenie = true;
    } }

if(( deltab2Y ) == 0 )
{
    katb2 = 0;
} else
{
    katb2 = atan(( deltab2X ) /( deltab2Y ) );
} //else

if( deltab2Y >= 0 )
{
    katb2 += M_PI;
} //if




if( chodzenie == true ) {
    if( ib2x != celb2x )
    { ib2x += sin( katb2 ) * predkosc2; }
   
    if(( celb2x - ib2x ) < predkosc2 )
    { ib2x = celb2x; }
   
    if( ib2x == celb2x )
    {
        if( ib2y != celb2y )
        {
            ib2y += cos( katb2 ) * predkosc2; } }
   
    if(( celb2y - ib2y ) < predkosc2 )
    { ib2y = celb2y; }
    if( ib2y == celb2y )
    { chodzenie = false; }
}






bot_x = ib2x;
bot_y = ib2y;

draw_sprite( bufor, bot, bot_x, bot_y );
P-7365
DejaVu
» 2009-06-01 22:20:08
Załóż nowy temat. rand() to inna bajka i nie nawiązuje już do tematu.
P-7370
1 « 2 »
Poprzednia strona Strona 2 z 2