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

[Allegro] Dodawanie i rozkład bitmap na ekranie

Ostatnio zmodyfikowano 2009-07-18 22:37
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[Allegro] Dodawanie i rozkład bitmap na ekranie
» 2009-07-18 19:56:28
Witam. Mam fotkę(bitmapę) którą chciałbym wczytać do programu powiedzmy 10 razy a następnie wszystkie te fotki rozłożyć, niekoniecznie tak samo, na całym ekranie. Chciałbym użyć do tego tablicy. W jaki najprostszy sposób mozna tego dokonać? Mogę prosić o jakiś mały przykładzik? Z góry dziękuję

P-8567
malan
» 2009-07-18 20:02:00
Nie za bardzo Cie zrozumiałem. Chcesz wczytać 10 fotek do programu, zapisać je do tablicy i wyświetlić?, czy 1 fotkę podzielić na 10 części i wyświetlić, czy jeszcze coś innego ?
P-8568
wojownik266
Temat założony przez niniejszego użytkownika
[Allegro] Dodawanie i rozkład bitmap na ekranie
» 2009-07-18 20:06:39
Tak chcę wczytać dziesięć fotek do tablicy a następnie je wyświetlić w różnym połozeniu na ekranie. Potem te fotki zamierzam wprawić w ruch w róznym temie i dołozyć do tego jeszcze kolizję...
P-8570
malan
» 2009-07-18 20:34:23
Jeśli już koniecznie musisz to wczytać do tablic to:

0. Deklarujesz stałą zmienną typu 'int', która będzie określała rozmiar tablicy.
1. Deklarujesz tablicę (np. typu 'string'), w której umieścisz ścieżki do fotek, np:
C/C++
std::string Tablica[] = { "fotka1.bmp", "C:/Windows/fotka2.bmp ...};
3. Deklarujesz tablicę typu 'BITMAP'.
4. Za pomocą pętli wczytujesz wszystkie fotki i wyświetlasz je na ekranie.

Pseudo kod:
C/C++
const int size = 10;
std::string Tablica[ size ] = { "fotka1.bmp", "fotka2", "fotka3", "fotka4",...};

BITMAP * default_bmp[ size ];

for( int i = 0; i < 10; i++ )
{
    default_bmp[ i ] = load_bmp( Tablica[ i ].c_str(), default_palette );
}

//...
Być może to nie jest najlepsze i najwydajniejsze rozwiązanie, ale ja bym tak zrobił ;p.
P-8572
wojownik266
Temat założony przez niniejszego użytkownika
» 2009-07-18 20:59:59
istnieje poza tablicami jesze jakiś inny sposób na wczytanie tych fotek?
P-8574
wojownik266
Temat założony przez niniejszego użytkownika
» 2009-07-18 21:27:10
Co w tym programie jest źle? Dlaczego wyświetla tylko jedną fotkę?

C/C++
#include <allegro.h>
#include <string>
using namespace std;

const int index = 10;
BITMAP * butelka[ index ];
BITMAP * bufor = NULL;

int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    set_palette( default_palette );
    bufor = create_bitmap( 800, 600 );
   
   
    while( !key[ KEY_ESC ] )
    {
       
        for( int i = 0; i < 10; i++ )
        {
           
            butelka[ i ] = load_bmp( "butelka.bmp", NULL );
            clear_to_color( bufor, makecol( 255, 255, 255 ) );
            masked_blit( butelka[ i ], bufor, 0, 0, 0, 0, butelka[ i ]->w, butelka[ i ]->h );
            blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
        }
    }
    for( int i = 0; i < 10; i++ )
         destroy_bitmap( butelka[ i ] );
   
    destroy_bitmap( bufor );
    allegro_exit();
    return 0;
}
END_OF_MAIN();

//Patzick: Do wklejania kodu używaj
[code src="C++"]
P-8575
malan
» 2009-07-18 22:37:06
1.
istnieje poza tablicami jesze jakiś inny sposób na wczytanie tych fotek?
 Tak- tworzysz dla każdej fotki osobną BITMAP-ę.

C/C++
BITMAP * fotka1 = NULL;
BITMAP * fotka2 = NULL;
BITMAP * fotka3 = NULL;
//...
fotka1 = load_bmp( "fotka1.bmp", default_palette );
fotka2 = load_bmp( "fotka2.bmp", default_palette );
fotka3 = load_bmp( "fotka3.bmp", default_palette );

2.
Co w tym programie jest źle? Dlaczego wyświetla tylko jedną fotkę?
Wyświetla jedną fotkę, bo tylko jedną fotkę załadowałeś ;p.
C/C++
for( int i = 0; i < 10; i++ )
{
    butelka = load_bmp( "butelka.bmp", NULL ); // Tu ładujesz tą jedną fotkę
    clear_to_color( bufor, makecol( 255, 255, 255 ) ); // Tutaj to nie potrzebne
    masked_blit( butelka, bufor, 0, 0, 0, 0, butelka->w, butelka->h ); // To też nie
    blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); // To również
}
Pomysł miałeś dobry, ale źle wykonałeś. Miałeś najpierw wczytać BITMAP-y do tablicy, potem je wyświetlić, a Ty wczytałeś jedną, potem ją wyświetlasz i jeszcze czyścisz bufor. Aha no i nie masz jeszcze tablicy z ścieżkami do fotek.
To powinno wyglądać np. tak:
C/C++
//...
std::string Tablica[ size ] = "fotka1.bmp", "fotka2.bmp", "fotka3.bmp", "fotka4.bmp",
"fotka5.bmp", "fotka6.bmp", "fotka7.bmp", "fotka8.bmp", "fotka9.bmp", "fotka10.bmp" };

for( int i = 0; i < 10; i++ )
{
butelka[ i ] = load_bmp( Tablica[ i ].c_str(), default_palette );
}

// Teraz dopiero wyświetlasz te fotki.
P-8577
« 1 »
  Strona 1 z 1