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

[Allegro] Izometryka..

Ostatnio zmodyfikowano 2008-08-02 17:32
Autor Wiadomość
jimmye
Temat założony przez niniejszego użytkownika
[Allegro] Izometryka..
» 2008-07-31 19:47:18
Robie gre izometryczna w allegro, ale nie wiem jak zrobic sterowanie do tej gry, np. jak sie wcisnie strzalke w lewo to zeby postac szla tak, jak bym wcisnal w gore i w lewo jednoczesnie.. i tak wszystkie klawisze.
C/C++
if( key[ KEY_LEFT, KEY_DOWN ] ) { ludek.kierunek = 4; ludek.x -= 2; }
if( key[ KEY_RIGHT ] ) { ludek.kierunek = 2; ludek.x += 2; }
if( key[ KEY_UP ] ) { ludek.kierunek = 1; ludek.y -= 2; }
if( key[ KEY_DOWN ] ) { ludek.kierunek = 3; ludek.y += 2; }
sterowanie postaci :P zrobilem tylko jeden kierunek ale jak reszte tak pomieszam to jest zle..
P-1110
Proxym
» 2008-07-31 20:43:41
Szczerze nie spotkałem sie jeszcze z grą w izometrii sterowanej przez klawiature ale ja bym zaproponował tak: (proste rozwiązanie, ale mało efektywne no i działa)

C/C++
if( key_left == DOWN )
{
    postac.x--;
    posta ć.y--;
}
if( key_right == DOWN )
{
    postac.x++;
    postac.y++;
}
if( key_up == DOWN )
{
    postac.x++;
    posta ć.y--;
}
if( key_down == DOWN )
{
    postc.x--;
    postac.y++;
}

P-1111
jimmye
Temat założony przez niniejszego użytkownika
» 2008-08-01 13:19:24
Prubowalem tego.. ale postac sama idzie na skos w dol caly czas, chyba jednak zrezygnuje z izometrii :P
P-1131
jimmye
Temat założony przez niniejszego użytkownika
» 2008-08-01 13:23:25
a wiesz jak skleic mape z postacia? zrobilem kawalek mapy, scrollowanie, ale nie moge dojsc to tego jak to skleic, postac i mape, zeby postac chodzila po mapie.
P-1132
DejaVu
» 2008-08-01 15:31:47
Hm... musisz utworzyć sobie zmienne:
- pozycja_kamery_x
- pozycja_kamery_y
Ustawiając kamerę na odpowiednim miejscu będzie Ci się scrollowała cała mapa.

Następnie musisz mieć:
- pozycja_ludka_x
- pozycja_ludka_y

Pozycja kamery może być ustalana w zależności od pozycji ludzika i to by było w sumie na tyle :)

Jeśli chcesz mieć kamerkę podpiętą pod ludzika, musisz zapewniać, by odległość między pozycja_kamery_x, a pozycja_ludka_x była mniejsza np. od 200 po to, żeby ludek był widoczny na ekranie. To samo dotyczy osi Y.
P-1134
jimmye
Temat założony przez niniejszego użytkownika
» 2008-08-01 20:43:58
dzieki, to jest dobre ;) ale jak skompiluje i uruchomie to pojawi sie na chwile i zamyka odrazu :|
moj kod
C/C++
#include <allegro.h>




volatile long speed = 0;
void increment_speed()
{
    speed++;
}
END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );


int mapa_x = 0, mapa_y = 0;
BITMAP * teren = NULL;
BITMAP * bufor = NULL;
BITMAP * kursor;
BITMAP * ludekb = NULL;

int mx = 0, my = 0, mb = 0;
void myszka()
{
    if( mx != mouse_x || my != mouse_y || mb != mouse_b )
    {
        mx = mouse_x;
        my = mouse_y;
        mb = mouse_b;
    }
};

void laduj_kursor()
{
    kursor = load_bitmap( "kursor.bmp", NULL );
    textprintf_ex( bufor, font, 20, 20, makecol( 200, 200, 200 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !", mx, my, mb );
    blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
    clear_keybuf();
    if( !kursor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac grafiki ( kursor )" );
        allegro_exit();
    }
};

class Cpostac
{
public:
    int x, y;
    short int kierunek, klatka;
};

Cpostac ludek;




short int map[ 15 ][ 20 ] =
{
    15, 15, 15, 15, 15, 7, 10, 10, 10, 10, 10, 10, 6, 15, 15, 15, 15, 15, 15, 15,
    15, 15, 15, 15, 15, 4, 9, 10, 10, 10, 8, 3, 5, 15, 0, 2, 2, 2, 1, 15,
    2, 1, 15, 15, 15, 15, 7, 10, 10, 10, 6, 15, 15, 15, 7, 10, 10, 10, 6, 15,
    10, 6, 15, 15, 15, 15, 4, 9, 10, 10, 6, 15, 15, 15, 4, 3, 3, 3, 5, 15,
    10, 12, 2, 1, 15, 15, 15, 7, 10, 8, 5, 15, 15, 15, 15, 15, 15, 15, 15, 15,
    10, 10, 10, 6, 15, 15, 15, 4, 3, 5, 15, 15, 15, 15, 15, 15, 15, 0, 2, 2,
    10, 10, 10, 6, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 2, 2, 13, 10, 10,
    3, 3, 3, 5, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 10, 10, 10, 8, 3,
    15, 15, 15, 15, 15, 0, 1, 15, 15, 15, 15, 15, 0, 2, 13, 10, 10, 10, 6, 15,
    15, 15, 15, 15, 15, 4, 5, 15, 15, 15, 15, 15, 7, 10, 10, 10, 10, 10, 6, 15,
    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 10, 10, 10, 10, 10, 6, 15,
    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 10, 10, 10, 10, 10, 6, 15,
    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 10, 10, 10, 10, 10, 6, 15
};


void wys_mape()
{
    int licznik_x, licznik_y;
    for( licznik_x = 0; licznik_x < 18; licznik_x++ )
    {
        for( licznik_y = 0; licznik_y < 12; licznik_y++ )
        {
            blit( teren, bufor,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 40,
            ( map[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 40,
            licznik_x * 40, licznik_y * 40, 40, 40 );
        }
    }
};


int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 40 ) );
    install_mouse();
    show_mouse( screen );
    set_mouse_sprite( kursor );
    unscare_mouse();
   
    BITMAP * ludekb = NULL;
   
   
   
    bufor = create_bitmap( 640, 480 );
    if( !bufor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora !" );
        allegro_exit();
        return 0;
    }
   
    teren = load_bmp( "teren.bmp", default_palette );
   
    while( !key[ KEY_ESC ] )
    {
        while( speed > 0 )
        {
           
            if(( key[ KEY_RIGHT ] ) &&( mapa_x < 10 ) ) { mapa_x = mapa_x + 1; } else
            if(( key[ KEY_LEFT ] ) &&( mapa_x > 0 ) ) { mapa_x = mapa_x - 1; } else
            if(( key[ KEY_DOWN ] ) &&( mapa_y < 5 ) ) { mapa_y = mapa_y + 1; } else
            if(( key[ KEY_UP ] ) &&( mapa_y > 0 ) ) { mapa_y = mapa_y - 1; }
            if( key[ KEY_S ] ) { load_bmp( "teren2.bmp", default_palette ); }
            speed--;
        }
       
       
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
       
       
        wys_mape();
       
        blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
    }
    ludekb = load_bmp( "postac.bmp", default_palette );
   
    int frame = 0;
    ludek.y = 100;
    ludek.klatka = 0;
    ludek.kierunek = 0;
   
    while( !key[ KEY_ESC ] )
    {
        while( speed > 0 )
        {
            ludek.kierunek = 0;
            if( key[ KEY_LEFT ] ) { ludek.kierunek = 4; ludek.x -= 2; }
            if( key[ KEY_RIGHT ] ) { ludek.kierunek = 2; ludek.x += 2; }
            if( key[ KEY_UP ] ) { ludek.kierunek = 1; ludek.y -= 2; }
            if( key[ KEY_DOWN ] ) { ludek.kierunek = 3; ludek.y += 2; }
        }
       
        remove_int( increment_speed );
        destroy_bitmap( ludekb );
        destroy_bitmap( teren );
        destroy_bitmap( bufor );
        allegro_exit();
        return 0;
    }
   
    END_OF_MAIN();
P-1137
jimmye
Temat założony przez niniejszego użytkownika
» 2008-08-02 16:53:04
zrobilem juz to, ale wlaczam projekt, ludka nie widac, tylko mape, kamera sie nie porusza..
P-1138
DejaVu
» 2008-08-02 17:32:09
Problem izometryki jest rozwiązany z tego co zrozumiałem, więc zamykam temat :) jeśli jeszcze w czymś możemy pomóc załóż odpowiedni temat. Nie ma sensu poruszać kilkunastu wątków w jednym temacie, bo użytku internauci z niego nie będą mieli.
P-1139
« 1 »
  Strona 1 z 1