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ę
|
|
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 ? |
|
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ę... |
|
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: 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: 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. |
|
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? |
|
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ę? #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++"] |
|
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-ę. 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. for( int i = 0; i < 10; i++ ) { butelka = load_bmp( "butelka.bmp", NULL ); clear_to_color( bufor, makecol( 255, 255, 255 ) ); masked_blit( butelka, bufor, 0, 0, 0, 0, butelka->w, butelka->h ); blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); } 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: 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 ); }
|
|
« 1 » |