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

Edytor map i i problem z rozmieszczeniem kafli

Ostatnio zmodyfikowano 2013-06-12 09:52
Autor Wiadomość
Fanatone
Temat założony przez niniejszego użytkownika
Edytor map i i problem z rozmieszczeniem kafli
» 2013-06-12 09:52:30
Witam.

Napisałem sobie edytor map korzystając z mapy kafelkowej z easykodera i pojawił mi się problem z rozmieszczeniem kafelków.
Wszystko jest dobrze gdy okno programu jest równe buforowi. Moje okno ma rozmiar 800x600 a bufor na razie 1200x600. Podczas przesunięcia mojej mapy kafelkowej i kliknięciu na niego wpisuje chyba inna wartość do tablicy i dlatego kafel pojawia się nie w tym miejscu co trzeba. I stąd moje pytanie czy bufor może być większy od okna aplikacji?

Mój kod wygląda na razie tak:
C/C++
#include <allegro.h>

int mapa[ 10 ][ 30 ] =
{
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};

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

void rysuj_mape()
{
    int licznik_x, licznik_y;
   
    for( licznik_x = 0; licznik_x < 30; licznik_x++ )
    {
        for( licznik_y = 0; licznik_y < 10; licznik_y++ )
        {
            masked_blit( teren, bufor,( mapa[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 4 ) * 40,( mapa[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 4 ) * 40, licznik_x * 40, licznik_y * 40, 40, 40 );
        }
    }
};

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

int main()
{
    allegro_init();
    install_keyboard();
    install_mouse();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    show_mouse( screen );
   
    bufor = create_bitmap( 1200, 600 );
    if( !bufor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie można utworzyc bufora!" );
        allegro_exit();
        return 0;
    }
   
    teren = load_bmp( "teren.bmp", default_palette );
    if( !teren )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie można zaladowac obrazka mapy!" );
        allegro_exit();
        return 0;
    }
   
   
    while( !key[ KEY_ESC ] )
    {
       
        myszka();
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        rysuj_mape();
        if( mb == 1 && mx < 30 && my < 10 )
        {
            mapa[ my ][ mx ] = 1;
        }
        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_UP ] ) &&( mapa_y > 0 ) ) { mapa_y = mapa_y - 1; }
       
        textprintf_ex( bufor, font, 10, 440, makecol( 255, 255, 128 ), - 1, "Pozycja X: %d (%d)", mx + 1, mx * 40 );
        textprintf_ex( bufor, font, 10, 460, makecol( 255, 255, 128 ), - 1, "Pozycja Y: %d (%d)", my + 1, my * 40 );
        blit( bufor, screen, 0, 0, 0, 0, 1200, 600 );
    }
    return 0;
    destroy_bitmap( bufor );
    destroy_bitmap( teren );
}
END_OF_MAIN();

Przeanalizowałem to chyba za sto razy i niedociągnięcia w kodzie nie znalazłem. Dlatego proszę o jakąkolwiek pomoc bo mógłbym ustawić rozmiar okna taki sam jak bufor ale moja tablica będzie znacznie większa niż jest dotychczas.





Znalazłem już problem. Kursor przy przesunięciu mapy ustawia nowe współrzędne rogu ekranu. Nie wiem jak zrobić aby liczył od początku bitmapy.

P-85413
« 1 »
  Strona 1 z 1