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

[C++, Allegro] Animowane elementy mapy kafelkowej

Ostatnio zmodyfikowano 2011-12-08 21:38
Autor Wiadomość
poldek
Temat założony przez niniejszego użytkownika
[C++, Allegro] Animowane elementy mapy kafelkowej
» 2011-12-08 21:26:05
Witam,
Tak jak w temacie chce zrobić Mario podobną gierkę ,ale chce wykorzystać animacje ,które mniej więcej umiem (zazwyczaj ich nie używam) i chce zrobić np.: Mapę kafelkową
3 4 //(x, y)
1 1 1
1 3 1
1 3 1
1 1 1

gdzie 3 to animowany znak zapytania ... wczytywanie mapy już mam ,ale nie wiem jak zrobić animacje mapy kafelkowej i tu się do was zwracam o pomoc. Pytanie brzmi jak to zrobić ?

Tutaj kod wczytywania mapy :
C/C++
void Mapa::loadMap( const char * filename )
{
    fstream plik( filename, ios::app | ios::in | ios::out );
    if( plik.good() == false )
    {
        //...
    }
    else
    {
        plik >> sizeX >> sizeY;
       
        for( int i = 0; i < sizeX; i++ )
        {
            for( int a = 0; a < sizeY; a++ )
            {
                plik >> Map[ i ][ a ];
            }
        }
    }
    plik.close();
}

Tu wyświetlania (bez animacji)
C/C++
void Mapa::OldDraw( BITMAP * bufor )
{
    for( int i = 0; i < sizeY; i++ )
    {
        for( int a = 0; a < sizeX; a++ )
        {
            if( Map[ a ][ i ] == 0 )
            {
                rectfill( bufor, i * BlockSize, a * BlockSize,
                i * BlockSize + BlockSize, a * BlockSize + BlockSize,
                makecol( 255, 255, 255 ) );
            }
            else if( Map[ a ][ i ] == 1 )
            {
                rectfill( bufor, i * BlockSize, a * BlockSize,
                i * BlockSize + BlockSize, a * BlockSize + BlockSize,
                makecol( 255, 255, 0 ) );
            }
        }
    }
}
P-45357
SeaMonster131
» 2011-12-08 21:33:21
Hm..
C/C++
int klatka_animacji = 0;

void Wyswietl_mape()
{
    klatka_animacji++;
   
   
   
    if( mapa[ y ][ x ] == 3 )
    {
        if( klatka_animacji <= 10 )
             wyswietl_bitmape( 1 );
       
        if( klatka_animacji > 10 && klatka_animacji <= 20 )
             wyswietl_bitmape( 2 );
       
        //...
       
    }
   
}

Czyli robisz to jak zwykłą animację :) Przynajmniej ja tak robiłem i wychodziło dobrze :)
P-45358
poldek
Temat założony przez niniejszego użytkownika
» 2011-12-08 21:38:35
Hmmm... Pewnie masz racje że tak można zrobić ale ale ale można się domyślić po nazwie funkcji rysującej OldDraw ...
mniej więcej po polsku to oznacza stare rysowanie i jeszcze jak by ktoś mógł znaleść rozwiązanie dla mojego ,,Nowego" rysowania... Z góry bardzo dziękuje

C/C++
void Mapa::SaveMap( const char * filename )
{
    BITMAP * Savebitmap = create_bitmap( sizeY * BlockSize, sizeX * BlockSize );
    for( int i = 0; i < sizeY; i++ )
    {
        for( int a = 0; a < sizeX; a++ )
        {
            if( Map[ a ][ i ] == 0 )
            {
                rectfill( Savebitmap, i * BlockSize, a * BlockSize,
                i * BlockSize + BlockSize, a * BlockSize + BlockSize,
                makecol( 255, 255, 255 ) );
            }
            else if( Map[ a ][ i ] == 1 )
            {
                rectfill( Savebitmap, i * BlockSize, a * BlockSize,
                i * BlockSize + BlockSize, a * BlockSize + BlockSize,
                makecol( 255, 255, 0 ) );
            }
        }
    }
   
    save_bitmap( filename, Savebitmap, default_palette );
    destroy_bitmap( Savebitmap );
}
 
i

C/C++
void Mapa::loadDrawMap( const char * filename )
{
    DrawMap = load_bitmap( filename, default_palette );
   
    if( !DrawMap )
    {
        cout << "error" << endl;
    }
}
//...
void Mapa::Draw( BITMAP * bufor )
{
    blit( DrawMap, bufor, 0, 0, 0, 0, DrawMap->w, DrawMap->h );
}
P-45361
« 1 »
  Strona 1 z 1