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

[Allegro]Problem ze scrollowaniem mapy

Ostatnio zmodyfikowano 2012-02-14 19:56
Autor Wiadomość
drago77
Temat założony przez niniejszego użytkownika
[Allegro]Problem ze scrollowaniem mapy
» 2012-02-10 13:44:44
Witam. Dopiero co zacząłem swoją przygodę z allegro i mam takie pytanie. Stworzyłem bitmape czolg, którą mogłem poruszać na ekranie. Potem chciałem zrobić mapę, i... lipa, bo mój czołg nie chce się poruszyć, a mapy jak nie było tak nie ma. Ma ktoś jakiś pomysł? Oto kod:
C/C++
#define ALLEGRO_STATICLINK
#include <allegro.h>

volatile long speed = 0;
void increment_speed()
{
    speed++;
}
END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );
/*************tablica do mapy*********************/
short int map[ 10 ][ 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
};
/******************wyswietla mape*************************/
int mapa_x = 0, mapa_y = 0;
void wys_mape( BITMAP * bufor, BITMAP * teren )
{
    int licznik_x, licznik_y;
    for( licznik_x = 0; licznik_x < 10; licznik_x++ )
    {
        for( licznik_y = 0; licznik_y < 5; 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( 32 );
    set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 1024, 768, 0, 0 );
    clear_to_color( screen, makecol( 128, 128, 128 ) );
    install_timer(); //instaluje timer
    install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) );
   
    BITMAP * teren = NULL;
    BITMAP * czolg = NULL;
    BITMAP * czolg_buffor = NULL;
   
    teren = load_bmp( "C:\\obrazy\\kafel.bmp", default_palette ); /*********wczytuje kafel mapy o rozmiarach 40x40****************/
    if( !teren )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie moge wyswietlic terenu" );
        allegro_exit();
        return 0;
    }
    czolg_buffor = create_bitmap( 1024, 768 ); /**********bufor grafiki***********/
    if( !czolg_buffor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora !" );
        allegro_exit();
        return 0;
    }
    czolg = load_bmp( "C:\\obrazy\\czolg.bmp", default_palette ); /************wczytanie grafiki************/
    if( !czolg )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "nie moge za³adowac obrazka czolg !" );
        allegro_exit();
        return 0;
    }
   
    int ludek_x = 100, ludek_y = 100;
    while( !key[ KEY_ESC ] )
    {
        if( speed > 0 ) /**********poruszanie bitmapa************/
        {
            if(( key[ KEY_RIGHT ] ) &&( mapa_x < 10 ) )
                 mapa_x += 1;
            else if(( key[ KEY_LEFT ] ) &&( mapa_x > 0 ) )
                 mapa_x -= 1;
            else if(( key[ KEY_DOWN ] ) &&( mapa_y < 5 ) )
                 mapa_y += 1;
            else if(( key[ KEY_UP ] ) &&( mapa_y > 0 ) )
                 mapa_y -= 1;
           
            speed++;
            clear_to_color( czolg_buffor, makecol( 150, 150, 150 ) );
            rest( 1 ); //odleglosc miedzy poruszeniem sie czolgu w milisekundach
            masked_blit( czolg, czolg_buffor /*tutaj kopiuje czolg*/, 0, 0, ludek_x, ludek_y, czolg->w, czolg->h );
            blit( czolg_buffor, screen, 0, 0, 0, 0, 1024, 768 );
        }
    }
    remove_int( increment_speed );
    destroy_bitmap( teren );
    destroy_bitmap( czolg );
    destroy_bitmap( czolg_buffor );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-50462
malan
» 2012-02-10 13:48:11
Nie no, poprawiłeś mi humor ^^ Przecież nigdzie nie wywołujesz funkcji odpowiedzialnej za wywołanie mapy (
wys_mape
), więc jakim cudem ma się ona pojawić?
P-50463
drago77
Temat założony przez niniejszego użytkownika
» 2012-02-10 14:04:52
Ok, faktycznie nie umieściłem tej funkcji, ale poprawiłem to i mam inny problem. Po włączeniu gra automatycznie się wyłącza. W czym może być problem? To kod funkcji wyświetlającej mapę:
C/C++
...

//wyswietlanie mapy
int mapa_x = 0, mapa_y = 0;
void wys_mape()
{
    BITMAP * teren = NULL;
    BITMAP * bufor = NULL;
    int licznik_x, licznik_y;
    for( licznik_x = 0; licznik_x < 10; licznik_x++ )
    {
        for( licznik_y = 0; licznik_y < 5; 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 );
        }
    }
};

...

Pomoże ktoś? :D
P-50464
SeaMonster131
» 2012-02-10 19:40:30
Wyświetlasz coś, czego nie ma?
P-50470
RazzorFlame
» 2012-02-14 19:56:09
Nie deklaruj bitmap w funkcjach. Pozatym jak napisał SeaMonster nie "zloadowałeś" bitmapy "BITMAP ... = NULL;"
P-50773
« 1 »
  Strona 1 z 1