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

[Allegro, C++] Mapa kafelkowa, scrollowanie mapy

Ostatnio zmodyfikowano 2010-05-26 20:19
Autor Wiadomość
Bartaz
Temat założony przez niniejszego użytkownika
[Allegro, C++] Mapa kafelkowa, scrollowanie mapy
» 2010-05-26 19:34:48
Witam mogl by mi ktos podac przykladowy kod z mapa kafelkowa i jej przewijaniem tylko zeby obrazki nie byly wycinane z jednej bitmapy .I wmiare to wytlumaczyc?^^
P-17189
filipesq
» 2010-05-26 19:56:24
Czekaj, zaraz napiszę.

//Edit:

Lepiej czytywać z jednej bitmapy, ale dobra, masz z kilku:
C/C++
//Deklaruję allegro

//Zmienne globalne:
BITMAP * plansza = create_bitmap( SCREEN_W, SCREEN_H ); //Tworzę bitmapę wielkości ekranu
//Wczytuję kafelki
BITMAP * kafelek1 = load_bmp( "image/kafelki/kafel1.bmp", default_palette );
BITMAP * kafelek2 = load_bmp( "image/kafelki/kafel2.bmp", default_palette );
//itd.

int mapa[ 20 ][ 20 ] //Mapa 20 na 20 kafli
{
    //Tablicę wypełniasz liczbami, które potem zamienisz na kafle
}

int szerokosc_kafla = 40, wysokosc_kafla = 40; //Każdy kafel ma wielkość 40 na 40 px

int map_x, map_y; //Pozycja mapy na osi x i y

void map( void )
{
    for( int x = 0; x > 10; x++ ) //Na osi x wyświetli 10 kafelków na raz
    {
        for( int y = 0; y > 10; y++ ) //Na osi y wyświetli 10 kafelków na raz
        {
            if( mapa[ x ][ y ] == 0 ) blit( kafelek1, plansza, 0, 0, map_x + x * szerokosc_kafla, y * wysokosc_kafla, szerokosc_kafla, wysokosc_kafla ); //Jeśli aktualnie sprawdzany kafelek na mapie ma wartość 1 to wyświetl kafelek1 obok poprzedniego kafelka. Pierwszy kafelek jest wyświetlany w miejscu map_x i map_y
           
            if( mapa[ x ][ y ] == 1 ) blit( kafelek1, plansza, 0, 0, map_x + x * szerokosc_kafla, y * wysokosc_kafla, szerokosc_kafla, wysokosc_kafla ); //Tu to samo
           
        }
    }
}
//...

while( /*warunek wyjścia*/ )
{
    //Scrollowanie: (poprostu przesuwamy początek mapy)
    if( key[ KEY_RIGHT ] ) map_x++;
    else if( key[ KEY_LEFT ] ) map_x--;
    else if( key[ KEY_DOWN ] ) map_y++;
    else if( key[ KEY_UP ] ) map_y--;
   
    //wyczyść bufor "plansza"
    map();
    //wyświetl bufor "plansza"
}

//...

//Niszczę allegro

Scrollowanie chyba złe, no i kod trzeba naprawdę dużo udoskonalić, ale pisałem na szybko.
P-17190
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-05-26 19:59:01
ok
P-17191
filipesq
» 2010-05-26 20:19:20
Dobra, napisałem
P-17192
« 1 »
  Strona 1 z 1