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

[AllegroPNG] Problem z kompilacją w linuksie.

Ostatnio zmodyfikowano 2010-02-13 12:05
Autor Wiadomość
Qtk
Temat założony przez niniejszego użytkownika
[AllegroPNG] Problem z kompilacją w linuksie.
» 2010-02-09 12:05:18
Witam, cały czas walczę z tym kodem, teraz jednak w linuksie.
Mam napisany taki kod :
C/C++
#include <allegro.h>
#include <alpng.h>



// Inicjalizowanie timera

volatile long speed = 0;

void increment_speed()

{
   
    speed++;
   
}

END_OF_FUNCTION( increment_speed );

LOCK_VARIABLE( speed );

LOCK_FUNCTION( increment_speed );



// Wczytywanie wszystkich potrzebnych grafik:

BITMAP * cegla = NULL;

BITMAP * kamien = NULL;

BITMAP * ludek = NULL;

BITMAP * panbomba = NULL;



BITMAP * bufor = NULL;

BITMAP * ziemia = NULL;



// Do sterowania naszya postacia:

int ludek_x = 100, ludek_y = 100;



// Do sterowania panem bomba:

int bomba_x = 500, bomba_y = 200;

int bomba_zasieg = 50;



// Tworzymy nasza mapę

void tworz_mape();



// Funkcja Główna

int main()

{
   
    allegro_init();
    alpng_init();
   
    install_keyboard();
   
    set_color_depth( 16 );
   
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
   
    install_timer();
   
    install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) );
   
   
   
    // Ładowanie grafiki
   
    BITMAP * cegla = load_png( "cegla.png", 0 );
   
    BITMAP * kamien = load_bmp( "kamien.png", 0 );
   
    BITMAP * ludek = load_bmp( "ludek.png", 0 );
   
    BITMAP * panbomba = load_bmp( "panbomba.png", 0 );
   
   
   
    // Tworzenie bufora
   
    bufor = create_bitmap( 800, 600 );
   
    // Oraz dodatkowej bitmapy ziemi
   
    ziemia = create_bitmap( 800, 600 );
   
    if( !bufor )
   
    {
       
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
       
        allegro_message( "Nie mogę utworzyć bufora!" );
       
        allegro_exit();
       
        return 0;
       
    }
   
    if( !ziemia )
   
    {
       
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
       
        allegro_message( "Nie mogę utworzyć bitmapy ziemi!" );
       
        allegro_exit();
       
        return 0;
       
    }
   
   
   
    // Tworzymy nasza mapę
   
    tworz_mape();
   
   
   
   
   
    while( !key[ KEY_ESC ] )
   
    {
       
        while( speed > 0 )
       
        {
           
            // Sterowanie nasza postacia
           
            if(( key[ KEY_RIGHT ] ) &&( ludek_x < 800 ) ) { ludek_x += 3; } else
           
            if(( key[ KEY_LEFT ] ) &&( ludek_x > 0 ) ) { ludek_x -= 3; } else
           
            if(( key[ KEY_DOWN ] ) &&( ludek_y < 5 ) ) { ludek_y = ludek_y + 1; } else
           
            if(( key[ KEY_UP ] ) &&( ludek_y > 40 ) ) { ludek_y -= 10; }
           
           
           
            // Sterowanie Panem Bomba
           
            if(( key[ KEY_W ] ) &&( bomba_y > 40 ) ) { bomba_y -= 5; } else
           
            if(( key[ KEY_S ] ) &&( bomba_y < 600 ) ) { bomba_y += 5; }
           
            if(( key[ KEY_A ] ) &&( bomba_x > 20 ) ) { bomba_x -= 5; } else
           
            if(( key[ KEY_D ] ) &&( bomba_x < 780 ) ) { bomba_x += 5; }
           
            if(( key[ KEY_Z ] ) &&( bomba_zasieg > 10 ) ) { bomba_zasieg -= 5; }
           
            if(( key[ KEY_X ] ) &&( bomba_zasieg < 200 ) ) { bomba_zasieg += 5; }
           
           
           
            if(( key[ KEY_SPACE ] ) ) {
               
                circlefill( ziemia, bomba_x, bomba_y, bomba_zasieg, makecol( 255, 0, 255 ) );
               
            }
           
           
           
           
           
            // Jeœli ludek wisi w powietrzu to powinien spadać:
           
            if( getpixel( ziemia, ludek_x, ludek_y ) != makecol( 255, 0, 255 ) &&
           
            getpixel( ziemia, ludek_x, ludek_y - 1 ) != makecol( 255, 0, 255 ) &&
           
            ludek_y > 40 ) ludek_y--;
           
            if( getpixel( ziemia, ludek_x, ludek_y ) == makecol( 255, 0, 255 ) ) ludek_y += 4;
           
           
           
            speed--;
           
        }
       
       
       
       
       
        // Czyszczenie bufora
       
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
       
        // Wczytanie ziemi na bufor
       
       
       
        masked_blit( ziemia, bufor, 0, 0, 0, 0, 800, 600 );
       
        masked_blit( ludek, bufor, 0, 0, ludek_x - 20, ludek_y - 40, ludek->w, ludek->h );
       
        masked_blit( panbomba, bufor, 0, 0, bomba_x - 20, bomba_y - 40, panbomba->w, panbomba->h );
       
       
       
        //
       
        textprintf_ex( bufor, font, 10, 30, makecol( 255, 255, 255 ), - 1, "Sila Pana Bomby : %d", bomba_zasieg );
       
        blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
       
    }
   
   
   
   
   
    // Usuwanie wszystkiego z pamięci.
   
    remove_int( increment_speed );
   
    destroy_bitmap( cegla );
   
    destroy_bitmap( kamien );
   
    destroy_bitmap( ludek );
   
    destroy_bitmap( ziemia );
   
    destroy_bitmap( bufor );
   
    allegro_exit();
   
    return 0;
   
}

END_OF_MAIN();



void tworz_mape()

{
   
    //Wypełniamy ziemie powietrzem
   
    clear_to_color( ziemia, makecol( 255, 0, 255 ) );
   
    //dodajemy podłoże z kamienia
   
    for( int i = 0; i < 20; i++ ) {
       
        masked_blit( kamien, ziemia, 0, 0, i * 200, 560, kamien->w, kamien->h );
       
        masked_blit( cegla, ziemia, 0, 0, i * 79, 280, cegla->w, cegla->h );
       
        masked_blit( cegla, ziemia, 0, 0, i * 40, 320, cegla->w, cegla->h );
       
    }
   
    for( int i = 0; i < 5; i++ ) {
       
        masked_blit( kamien, ziemia, 0, 0, 100, 520 - i * 40, kamien->w, kamien->h );
       
        masked_blit( kamien, ziemia, 0, 0, 500, 520 - i * 40, kamien->w, kamien->h );
       
       
       
        masked_blit( cegla, ziemia, 0, 0, 200 + i * 40, 480, cegla->w, cegla->h );
       
    }
   
    masked_blit( cegla, ziemia, 0, 0, 500, 100, cegla->w, cegla->h );
   
    masked_blit( kamien, ziemia, 0, 0, 100, 100, kamien->w, kamien->h );
   
}
Przy kompilacji nie wyskakują żadne błedy, dopiero gdy chcę otworzyć binarkę za pomocą "./nazwa pliku" okno pojawia się dosłowniew na 1 sec. i znika, w konsoli wyskakuje błąd "Aborted"... Wie ktoś może jak to rozwiązać ?:>
P-13684
malan
» 2010-02-09 17:34:19
Pierwsze co rzuciło mi się w oczy to:
BITMAP * cegla = load_png( "cegla.png", 0 );
Powinno być:
cegla = load_png( "cegla.png", 0 );
Ponieważ cegła zadeklarowałeś już wcześniej. Jednak za wiele to nie zmieni.

Ewentualnie jeszcze:
set_color_depth(32);
P-13688
pekfos
» 2010-02-09 18:10:03
kod EasyKodera? pobierz z działu download (EasyKodera) projekt
i uruchom. jak działa to (z tego co pamiętam to w paczce są kody)
skompiluj i uruchom. jak nie działa to przeinstaluj kompilator lub
coś takiego
P-13689
Qtk
Temat założony przez niniejszego użytkownika
» 2010-02-09 19:10:46
pekfos -> Tak, tylko,że na winzgrozie ten kod działa. Gorzej jest jak chcę uruchomić to pod Ubuntu.

malan -> Zaraz coś popróbuje z tym :P
P-13699
Qtk
Temat założony przez niniejszego użytkownika
» 2010-02-09 21:53:28
No niestety nie zadziałało :<. Ma ktoś inny pomysł ?:>
P-13719
DejaVu
» 2010-02-09 21:59:01
Nie wiem czy pod Linuxem istnieje odpowiednik plików *.dll, ale jeśli tak to zapewne musisz swój projekt allegro zlinkować statycznie i powinno działać.
P-13721
Elaine
» 2010-02-09 22:04:30
Jest, .so.
P-13724
madmike44
» 2010-02-13 12:05:36
Często zdarza się też, że pliki wykonywalne bez wymaganych bibliotek *.so nie uruchomią się - i jednocześnie nie wyświetlą żadnych komunikatów o błędach.. Trzeba więc wiedzieć, co trzeba dodać do gotowej binarki.
P-13844
« 1 »
  Strona 1 z 1