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

[C++ Allegro] Wolne wyświetlanie bitmapy.

Ostatnio zmodyfikowano 2012-03-24 23:58
Autor Wiadomość
Gaatt
Temat założony przez niniejszego użytkownika
» 2012-03-20 20:09:14
Nie umiem przekazać bitmapy do funkcji. W projekcie mam 3 pliki: main, z funkcjami oraz header. Czy mógłbym prosić o pomoc w napisaniu wywołania, parametrów oraz prototypu funkcji? Z pomoc z góry dziękuję.

@EDIT Metodą prób i błędów udało się.
P-52983
jankowalski25
» 2012-03-20 21:00:42
Możesz zamieścić swoje rozwiązanie dla innych.
P-53004
Gaatt
Temat założony przez niniejszego użytkownika
» 2012-03-21 15:25:45
Udało mi się tylko przekazać bitmapę do funkcji (zamieszczam kod całego programu). Postępowałem wedle waszych zaleceń, jednak problem nie jest rozwiązany (sam też wprowadziłem zmiany). Kod przechowuję w 3 plikach, jednak tu zamieszczę go razem (nie ma to znaczenia). Może mam zamieścić w internecie pliki mojej aplikacji, które pozwoliłoby zweryfikować problem. Oto kod:

C/C++
#include "allegro5/allegro.h"
#include "allegro5/allegro_image.h"
#include <allegro5/allegro_native_dialog.h>

int Menu( ALLEGRO_BITMAP * menu, ALLEGRO_BITMAP * czolgMenu0, ALLEGRO_BITMAP * czolgMenu1,
ALLEGRO_BITMAP * czolgMenu2, ALLEGRO_BITMAP * czolgMenu3, ALLEGRO_EVENT_QUEUE * event_queue );
//void Gra();
//void Sterowanie();
//void Wyniki();
//int Mapa();

int main( int argc, char ** argv )
{
   
    ALLEGRO_DISPLAY * display = NULL;
    al_init();
    al_init_image_addon();
   
    al_install_keyboard();
   
    display = al_create_display( 838, 638 );
   
    ALLEGRO_EVENT_QUEUE * event_queue = NULL;
    event_queue = al_create_event_queue();
   
    al_register_event_source( event_queue, al_get_display_event_source( display ) );
    al_register_event_source( event_queue, al_get_keyboard_event_source() );
   
   
   
    ALLEGRO_BITMAP * menu = NULL;
    menu = al_load_bitmap( "menu.bmp" );
   
    ALLEGRO_BITMAP * czolgMenu0 = NULL;
    ALLEGRO_BITMAP * czolgMenu1 = NULL;
    ALLEGRO_BITMAP * czolgMenu2 = NULL;
    ALLEGRO_BITMAP * czolgMenu3 = NULL;
   
    czolgMenu0 = al_load_bitmap( "czolgMenu0.bmp" );
    czolgMenu1 = al_load_bitmap( "czolgMenu1.bmp" );
    czolgMenu2 = al_load_bitmap( "czolgMenu2.bmp" );
    czolgMenu3 = al_load_bitmap( "czolgMenu3.bmp" );
   
    al_convert_mask_to_alpha( czolgMenu0, al_map_rgb( 255, 0, 255 ) );
    al_convert_mask_to_alpha( czolgMenu1, al_map_rgb( 255, 0, 255 ) );
    al_convert_mask_to_alpha( czolgMenu2, al_map_rgb( 255, 0, 255 ) );
    al_convert_mask_to_alpha( czolgMenu3, al_map_rgb( 255, 0, 255 ) );
   
    bool wyjscie = false;
    int wyborMenu;
   
    while( !wyjscie )
    {
       
        wyborMenu = Menu( menu, czolgMenu0, czolgMenu1, czolgMenu2, czolgMenu3, event_queue );
        switch( wyborMenu )
        {
            /*case 0: Gra();
            break;
            //case 1: Sterowanie();
            break;
            //case 2: Wyniki();
            break;*/
            default: wyjscie = true;
        }
    }
   
    al_destroy_bitmap( menu );
    al_destroy_bitmap( czolgMenu0 );
    al_destroy_bitmap( czolgMenu1 );
    al_destroy_bitmap( czolgMenu2 );
    al_destroy_bitmap( czolgMenu3 );
   
    al_destroy_event_queue( event_queue );
    al_destroy_display( display );
    return 0;
}


int Menu( ALLEGRO_BITMAP * menu, ALLEGRO_BITMAP * czolgMenu0, ALLEGRO_BITMAP * czolgMenu1, ALLEGRO_BITMAP * czolgMenu2, ALLEGRO_BITMAP * czolgMenu3, ALLEGRO_EVENT_QUEUE * event_queue )
{
    bool koniec = false;
    bool rysuj = false;
   
    int wyborMenu = 0;
    al_draw_bitmap( menu, 0, 0, NULL );
    al_draw_bitmap( czolgMenu0, 50, wyborMenu * 70 + 212, 0 );
    al_flip_display();
   
    while( !koniec )
    {
        ALLEGRO_EVENT ev;
        al_wait_for_event( event_queue, & ev );
       
        if( ev.type == ALLEGRO_EVENT_KEY_DOWN )
        {
            switch( ev.keyboard.keycode )
            {
            case ALLEGRO_KEY_UP:
                {
                    if( wyborMenu == 0 ) wyborMenu = 4;
                    else wyborMenu--;
                   
                    if( wyborMenu == 3 ) wyborMenu--;
                   
                    break;
                }
               
            case ALLEGRO_KEY_DOWN:
                {
                    if( wyborMenu == 4 ) wyborMenu = 0;
                    else wyborMenu++;
                   
                    if( wyborMenu == 3 ) wyborMenu++;
                   
                    break;
                }
               
            case ALLEGRO_KEY_SPACE:
                {
                    koniec = true;
                    break;
                }
            }
        }
        al_draw_bitmap( menu, 0, 0, NULL );
        al_draw_bitmap( czolgMenu0, 50, wyborMenu * 70 + 212, NULL );
        al_flip_display();
    }
    al_draw_bitmap( czolgMenu1, 50, wyborMenu * 70 + 212, 0 );
    al_rest( 0.1 );
    al_flip_display();
    al_draw_bitmap( czolgMenu2, 50, wyborMenu * 70 + 212, 0 );
    al_rest( 0.1 );
    al_flip_display();
    al_draw_bitmap( czolgMenu3, 50, wyborMenu * 70 + 212, 0 );
    al_rest( 0.1 );
    al_flip_display();
    al_rest( 0.5 );
   
    return wyborMenu;
}
P-53030
Gaatt
Temat założony przez niniejszego użytkownika
» 2012-03-21 23:03:24
Zamieściłem wszystkie pliki na stronie https://rapidshare.com/files/1030402406/Release.rar;Release.rar. Korzystam z MS Visual Studio 2010 Express. Bibliotekę Allegro instalowałem według:http://wiki.allegro.cc/index.php?title=Windows,_Visual_Studio_2010_and_Allegro_5. Czy mógłbym prosić o skompilowanie projektu? Może mam błąd w instalacji biblioteki.
P-53062
Gaatt
Temat założony przez niniejszego użytkownika
» 2012-03-22 20:58:33
Ktoś coś wymyślił? Ja tylko zauważyłem, że po wyłączeniu konsoli działa nieco lepiej.
P-53102
Gaatt
Temat założony przez niniejszego użytkownika
» 2012-03-24 23:58:57
Okazuje się, że to tylko u mnie nie działa. Na każdym innym komputerze jest wszytko tak jak powinno. Ma ktoś pomysł dlaczego?
P-53171
1 « 2 »
Poprzednia strona Strona 2 z 2