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

[Allegro, C++] Srcolling mapy kafelkowej

Ostatnio zmodyfikowano 2010-07-11 18:27
Autor Wiadomość
Bartaz
Temat założony przez niniejszego użytkownika
[Allegro, C++] Srcolling mapy kafelkowej
» 2010-07-11 12:33:04
Witam moze mi ktos poprawic ten kod bo ja juz nie mam sil xd
-Nie dziala w nim to ze nie moge przesuwac mapy ani do gory ani na dol tylko lewo prawo no i dziwnie sie jakos wyswietlaja te kafelki.

Kod:

C/C++
#include <allegro.h>
BITMAP * bufor = NULL;
BITMAP * kafelek1 = NULL; /* trawa */
BITMAP * kafelek2 = NULL; /* droga */
BITMAP * kafelek3 = NULL; /* droga_pasek */
BITMAP * kafelek4 = NULL; /* ziemia */


short int mapa[ 30 ][ 30 ] =
{
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
int szerokosc_kafla = 50, wysokosc_kafla = 50; //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 < 1000; x++ ) //Na osi x wyświetli 100 kafelków na raz
    {
        for( int y = 0; y < 1000; y++ ) //Na osi y wyświetli 100 kafelków na raz
        {
            if( mapa[ x ][ y ] == 1 ) blit( kafelek1, bufor, 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 ] == 2 ) blit( kafelek2, bufor, 0, 0, map_x + x * szerokosc_kafla, y * wysokosc_kafla, szerokosc_kafla, wysokosc_kafla ); //Tu to samo
           
        }
    }
}
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 32 );
    set_gfx_mode( GFX_AUTODETECT, 1000, 700, 0, 0 );
   
   
    kafelek1 = load_bitmap( "Gfx/Maps/grass.bmp", default_palette );
    kafelek2 = load_bitmap( "Gfx/Maps/way.bmp", default_palette );
    kafelek3 = load_bitmap( "Gfx/Maps/way_white.bmp", default_palette );
    kafelek4 = load_bitmap( "Gfx/Maps/ziemia.bmp", default_palette );
   
   
    bufor = create_bitmap( 1000, 700 );
   
   
   
   
    while( !key[ KEY_ESC ] )
    {
        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--;
       
        clear_to_color( bufor, makecol( 70, 70, 70 ) );
        map();
        masked_blit( bufor, screen, 0, 0, 0, 0, 1000, 700 );
    }
    allegro_exit();
    return( 0 );
}
END_OF_MAIN();
[ / code ]
P-19742
DejaVu
» 2010-07-11 12:49:36
Mapy kafelkowe były wałkowane po milion razy. Poza tym kod jest bardzo krótki, więc łatwo namierzyć błąd. Skoro mapa się nie przesuwa góra/dół to znaczy, że oś Y masz stałą, bądź nie modyfikujesz przesunięcia Y. W Twoim przypadku jest to przypadek pierwszy.
P-19744
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-07-11 13:26:55
Nadal nie moge znalesc bledu...
P-19745
DejaVu
» 2010-07-11 13:31:47
Przeanalizuj użycie funkcji blit.
P-19746
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-07-11 15:44:53
Dobra wyszlo mi takie cos

C/C++
void map( void )
{
    for( int x = 0; x < 100; x++ ) //Na osi x wyświetli 100 kafelków na raz
    {
        for( int y = 0; y < 100; y++ ) //Na osi y wyświetli 100 kafelków na raz
        {
            if( mapa[ x ][ y ] == 1 ) blit( kafelek1, bufor, 0, 0, map_x + y * szerokosc_kafla, map_y + x * wysokosc_kafla, szerokosc_kafla, wysokosc_kafla );
           
            if( mapa[ x ][ y ] == 2 ) blit( kafelek2, bufor, 0, 0, map_x + y * szerokosc_kafla, map_y + x * wysokosc_kafla, szerokosc_kafla, wysokosc_kafla );
           
        }
    }
}

ale ulozenie kafelkow nie zgadza się z tym :

short int mapa[10][10] =
{
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
}; 


czemu?
P-19757
lenrokskate
» 2010-07-11 16:00:40
kombinuj
P-19758
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-07-11 16:08:21
Ja kombinuje od rana i tylko wymyslilem tamto, a zaden z tych w postow w temacie mi nie pomogl;/
Wiec moze ktos wkoncu napisze cos innego oprocz kombinuj itp.
P-19759
lenrokskate
» 2010-07-11 16:09:57
pętla for musi się dostosować do rozmiaru mapy...

nie może być tu 10 a tu 100
P-19760
« 1 » 2
  Strona 1 z 2 Następna strona