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

[C++, Allegro] Co zrobić, żeby określić, że jedna bitmapa leży na drugiej (problem natury technicznej)

Ostatnio zmodyfikowano 2014-02-19 21:38
Autor Wiadomość
Fofokus
Temat założony przez niniejszego użytkownika
[C++, Allegro] Co zrobić, żeby określić, że jedna bitmapa leży na drugiej (problem natury technicznej)
» 2014-02-19 20:05:44
Witam,

sorki za troszkę nieprzejrzysty tytuł, ale nie wiedziałem jak to ubrać w słowa.
Otóż sprawa ma się tak:
przebrnąwszy przez podstawy allegro, postanowiłem, że dla przypomnienia całego materiału napiszę sobie małą gierkę.
Chodzi w niej o to, że naprzeciw siebie stoją sobie dwa ludziki i miotają w siebie kulami ognia (jeden ma ograniczone pole ruchu, a drugi nie [ nie chciało mi się robić tego u drugiego ludka :P] podobnie z tym "miotaniem kul", tą umiejętność także posiada tylko jeden z nich, ale to nie jest istotne. Rzecz w tym, że nie wiem co zrobić, żeby dać do zrozumienia kompilatorowi, że kula zderzyła się z ludzikiem.
if( chlopek2_x == kula_x && chlopek2_y == kula_y ) return 0;
ująłem to tak, czyli jeśli ludzik oberwie kulą to program się zamknie... no właśnie. Kula musi uderzyć w dokładnie jeden konkrety punkt, a chciałbym, żeby przy uderzeniu w jakikolwiek punkt bitmapy, jaką jest ludzik wykonywała się instrukcja return 0;. Chciałem to wygooglować, ale trudno było mi znaleźć słowo klucz tego problemu, toteż wyniki były raczej mierne.
P-104979
Fofokus
Temat założony przez niniejszego użytkownika
» 2014-02-19 20:11:11
C/C++
#include <allegro.h>
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 1200, 800, 0, 0 );
    //------------------------------------------//
    BITMAP * chlopek = load_bmp( "chlopek.bmp", NULL );
    BITMAP * chlopek2 = load_bmp( "chlopek2.bmp", NULL );
    BITMAP * kula = load_bmp( "kula.bmp", NULL );
    BITMAP * bufor = create_bitmap( 1200, 800 );
    clear_to_color( bufor, makecol( 0, 255, 0 ) );
    //------------------------------------------//
    int chlopek_x = 0, chlopek_y = 0, chlopek2_x = 1000, chlopek2_y = 300, kula_x = chlopek_x + 20, kula_y = chlopek_y + 20;
    int pozycja = 0;
    bool kulax = false;
    while( !key[ KEY_ESC ] )
    {
        if( key[ KEY_W ] && chlopek_y > 0 ) { chlopek_y--; kula_y--; }
        if( key[ KEY_S ] && chlopek_y < 650 ) { chlopek_y++; kula_y++; }
        if( key[ KEY_D ] && chlopek_x < 200 ) { chlopek_x++; kula_x++; }
        if( key[ KEY_A ] && chlopek_x > 0 ) { chlopek_x--; kula_x--; }
        if( key[ KEY_UP ] ) chlopek2_y--;
       
        if( key[ KEY_DOWN ] ) chlopek2_y++;
       
        if( key[ KEY_RIGHT ] ) chlopek2_x++;
       
        if( key[ KEY_LEFT ] ) chlopek2_x--;
        //--------------------------------------//
        if( key[ KEY_X ] )
        {
            kulax = true;
           
        }
        if( kulax )
        {
            masked_blit( kula, bufor, 0, 0, kula_x, kula_y, kula->w, kula->h );
            kula_x = kula_x + 10;
            masked_blit( kula, bufor, 0, 0, kula_x, kula_y, kula->w, kula->h );
            if( kula_x >= 1200 ) kulax = false;
           
        } else { kula_x = chlopek_x + 20; kula_y = chlopek_y + 20; }
        //--------------------------------------//
        if( chlopek2_x == kula_x && chlopek2_y == kula_y ) return 0;
       
        blit( bufor, screen, 0, 0, 0, 0, 1200, 800 );
        clear_to_color( bufor, makecol( 0, 255, 0 ) );
        masked_blit( chlopek, bufor, pozycja, 0, chlopek_x, chlopek_y, 200, 200 );
        masked_blit( chlopek2, bufor, 0, 0, chlopek2_x, chlopek2_y, chlopek2->w, chlopek2->h );
    }
   
    readkey();
    allegro_exit();
}
END_OF_MAIN();
tutaj kodzik, byłbym także wdzięczny za jakieś sugestie co do poprawy kodu, bo jestem początkujący w Allegro i często słyszę, że w moim kodzie można coś pozamieniać, żeby działał szybciej (np ktoś kiedyś tłumaczył, żeby nie używać load_bmp wewnątrz głównej pętli, tylko na zewnątrz, bo inaczej program będzie działał wolniej)
P-104981
maly
» 2014-02-19 20:48:58
Frazy, które należy wpisać w wyszukiwarkę google:
P-104983
Fofokus
Temat założony przez niniejszego użytkownika
» 2014-02-19 21:38:06
Dzięki bardzo. Już wiem gdzie szukać :)
P-104987
« 1 »
  Strona 1 z 1