eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › [Allegro] Kolizja myszki z obiektem
Ilość wypowiedzi w tym wątku: 8

  • 1. Data: 2009-07-08 09:02:53
    Temat: [Allegro] Kolizja myszki z obiektem
    Od: krzysztof posłuszny <w...@w...pl>

    W programie mam wczytany obrazek który porusza się losowo po ekranie i jako
    kursor myszki wczytany drugi obrazek (celownik). Teraz chciałbym aby po
    najechaniu celownikiem na poruszający się obiekt doszło do kolizji i
    wyświetlenia napisu np. kolizja. Za cholerę nie mogę sobie dać z tym rady.
    Siedzę już nad tym parę dni. Pomoże mi ktoś rozwiązać ten problem? W
    załaczeniu przesyłam kod programu.

    #include <allegro.h>
    #include <cstdlib>
    volatile long speed = 0;

    void increment_speed()
    {
    speed++;
    }
    END_OF_FUNCTION(increment_speed);

    LOCK_VARIABLE(speed);
    LOCK_FUNCTION(increment_speed);
    class Cpostac
    {
    public:
    short int x,y;
    short int s,w;
    };
    Cpostac cel1,kursor1;
    bool kolizja(int x1,int y1,int s1,int w1,int x2,int y2,int s2,int w2)
    {
    if( x2<=x1+s1 && x2>x1 && y2>=y1 && y2<=y1+w1) return true; else
    if( x2<=x1+s1 && x2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true; else
    if( x2+s2<=x1+s1 && x2+s2>x1 && y2>=y1 && y2<=y1+w1) return true; else
    if( x2+s2<=x1+s1 && x2+s2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true;
    else return false;
    };

    BITMAP *kursor;

    void laduj_kursor()
    {
    kursor = load_bitmap("celownik.bmp",NULL);
    if (!kursor)
    {
    set_gfx_mode(GFX_TEXT,0,0,0,0);
    allegro_message("Nie moge zaladowac grafiki ( kursor )");
    allegro_exit();
    }
    };

    int mx=0,my=0,mb=0;
    void myszka()
    {
    if( mx != mouse_x || my != mouse_y || mb != mouse_b)
    {
    mx = mouse_x;
    my = mouse_y;
    mb = mouse_b;

    }
    };
    int main()
    {
    allegro_init();
    install_keyboard();
    set_color_depth(16);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);
    clear_to_color(screen, makecol(128,128,128));
    install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,"");
    install_timer();
    install_int_ex(increment_speed, BPS_TO_TIMER(100));
    set_volume(255,255);
    //Tytuł okienka
    set_window_title("GRA DANIELA");
    laduj_kursor();
    install_mouse();
    show_mouse(screen);
    set_mouse_sprite(kursor);
    unscare_mouse();

    SAMPLE *dzwiek = NULL;
    BITMAP *daniel = NULL;
    BITMAP *celownik=NULL;
    BITMAP *bufor = NULL;
    BITMAP *cel=NULL;
    bufor = create_bitmap(800,600);
    // Ładowanie postaci
    cel1.x=rand()%500; cel1.y=rand()%500; cel1.s=64; cel1.w=67;
    kursor1.x=0; kursor1.y=0; kursor1.s=40; kursor1.w=40;

    daniel = load_bmp("daniel.bmp",default_palette);
    if (!daniel)
    {
    set_gfx_mode(GFX_TEXT,0,0,0,0);
    allegro_message("nie mogę załadować obrazka Daniel !");
    allegro_exit();
    return 0;
    }
    blit( daniel, screen, 0,0, 0,0, daniel->w, daniel->h);
    readkey();
    dzwiek = load_sample("muzyka.wav");
    if (!dzwiek)
    {
    set_gfx_mode(GFX_TEXT,0,0,0,0);
    allegro_message("nie mogę załadować dzwieku !");
    allegro_exit();
    return 0;
    }
    play_sample(dzwiek, 255,127,1000,1);
    cel = load_bmp("cel.bmp",default_palette);
    blit( cel, screen, 0,0, 0,0, cel->w, cel->h);
    while (!key[KEY_ESC])
    {
    //Zdobyte punkty
    int licznik=0;

    myszka();
    while( speed > 0)
    {
    cel1.x=rand()%500;
    cel1.y=rand()%500;
    speed--;
    }
    clear_to_color(bufor, makecol(0,0,0));
    masked_blit(cel, bufor, 0,0,cel1.x, cel1.y,cel1.s,cel1.w);
    //masked_blit( kursor, bufor, 0,0, kursor1.x, kursor1.y, kursor1.s,
    kursor1.w);
    // Wyswietlanie napisu jeśli kolizja
    if(kolizja( cel1.x,cel1.y,cel1.s, cel1.w, kursor1.x, kursor1.y, kursor1.s,
    kursor1.w)==true)
    { textout_ex(bufor,font,"Kolizja !",20,20 ,makecol(255,200,255),-1); }
    //Odmierzanie czasu w sekundach
    int czas=clock()/1000;
    textprintf_ex(bufor,font,20,40,makecol(200,200,200),
    -1,"CZAS GRY =
    %d",czas,0,0);
    textprintf_ex(bufor,font,20,20,makecol(200,200,200),
    -1,"ZDOBYTE PUNKTY =
    %d",licznik,0,0);
    blit( bufor,screen, 0,0,0,0, 800,600);
    rest(600);
    }
    destroy_bitmap(daniel);
    destroy_bitmap(bufor);
    destroy_bitmap(kursor);
    destroy_bitmap(cel);
    stop_sample(dzwiek);

    allegro_exit();
    return 0;
    }
    END_OF_MAIN();


  • 2. Data: 2009-07-08 09:28:17
    Temat: Re: [Allegro] Kolizja myszki z obiektem
    Od: Michoo <m...@v...pl>

    krzysztof posłuszny pisze:
    > W programie mam wczytany obrazek który porusza się losowo po ekranie i jako
    > kursor myszki wczytany drugi obrazek (celownik). Teraz chciałbym aby po
    > najechaniu celownikiem na poruszający się obiekt doszło do kolizji i
    > wyświetlenia napisu np. kolizja. Za cholerę nie mogę sobie dać z tym rady.
    > Siedzę już nad tym parę dni. Pomoże mi ktoś rozwiązać ten problem? W
    > załaczeniu przesyłam kod programu.
    Po pierwsze brakuje definicji czym jest kolizja - zetknięciem 2
    obiektów, czy umieszczeniem jednego w całości wewnątrz drugiego.
    Po drugie - weź sobie kartkę i narysuj na niej prostokąty a potem
    podpisz współrzędne wierzchołków - będzie ci łatwiej ogarnąć który bok
    musisz porównać z którym.

    > if( x2<=x1+s1 && x2>x1 && y2>=y1 && y2<=y1+w1) return true; else
    Przeczytaj co napisałeś w tych warunkach:
    jeżeli x2 jest _mniejsze_ od x1+szerokość i _równocześnie_ x2 jest
    _większe_ od x1.

    --
    Pozdrawiam
    Michoo


  • 3. Data: 2009-07-08 10:01:32
    Temat: Re: [Allegro] Kolizja myszki z obiektem
    Od: Borafu <b...@g...pl>

    krzysztof posłuszny pisze:
    > W programie mam wczytany obrazek który porusza się losowo po ekranie i jako
    > kursor myszki wczytany drugi obrazek (celownik). Teraz chciałbym aby po
    > najechaniu celownikiem na poruszający się obiekt doszło do kolizji i
    > wyświetlenia napisu np. kolizja. Za cholerę nie mogę sobie dać z tym rady.

    Nie wiem co dokładnie robisz, więc może moja uwaga będzie nietrafiona.
    ale kilka razy w życiu wlazłem przez przypadek na stronę gdzie taki
    celownik się komuś udał i szczerze mówiąc nie wiem co na tych stronach
    jeszcze było.
    Wycofałem się natychmiast i nigdy więcej nie wlazłem.
    Znam jeszcze kilka osób, które reagują tak samo.

    pozdr
    --
    Borafu


  • 4. Data: 2009-07-08 10:14:58
    Temat: Re: [Allegro] Kolizja myszki z obiektem
    Od: krzysztof posłuszny <w...@w...pl>


    Użytkownik "Borafu" napisał
    > krzysztof posłuszny pisze:
    >> W programie mam wczytany obrazek który porusza się losowo po ekranie i
    >> jako
    >> kursor myszki wczytany drugi obrazek (celownik). Teraz chciałbym aby po
    >> najechaniu celownikiem na poruszający się obiekt doszło do kolizji i
    >> wyświetlenia napisu np. kolizja. Za cholerę nie mogę sobie dać z tym
    >> rady.
    >
    > Nie wiem co dokładnie robisz, więc może moja uwaga będzie nietrafiona. ale
    > kilka razy w życiu wlazłem przez przypadek na stronę gdzie taki celownik
    > się komuś udał i szczerze mówiąc nie wiem co na tych stronach jeszcze
    > było.
    > Wycofałem się natychmiast i nigdy więcej nie wlazłem.
    > Znam jeszcze kilka osób, które reagują tak samo.
    >

    No i kto by przypuszczał. Taki młody chłopak. A fuj!!!


  • 5. Data: 2009-07-08 11:26:32
    Temat: Re: [Allegro] Kolizja myszki z obiektem
    Od: Michal Kleczek <k...@g...com>

    krzysztof posłuszny wrote:

    [ciach]
    >

    http://oakroadsystems.com/genl/unice.htm#xpost

    --
    Michal


  • 6. Data: 2009-07-11 17:54:29
    Temat: Re: [Allegro] Kolizja myszki z obiektem
    Od: Solaris <s...@b...inspired>

    Dnia Wed, 8 Jul 2009 11:02:53 +0200, jakże pięknego
    krzysztof posłuszny <w...@w...pl> wystukał co zawarte poniżej:


    : Cpostac cel1,kursor1;
    : bool kolizja(int x1,int y1,int s1,int w1,int x2,int y2,int s2,int w2)
    : {
    : if( x2<=x1+s1 && x2>x1 && y2>=y1 && y2<=y1+w1) return true; else
    : if( x2<=x1+s1 && x2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true; else
    : if( x2+s2<=x1+s1 && x2+s2>x1 && y2>=y1 && y2<=y1+w1) return true; else
    : if( x2+s2<=x1+s1 && x2+s2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true;
    : else return false;

    A nie prościej tak?

    if ( mouse.x >= postac.x AND
    mouse.y >= postac.y AND
    mouse.x <= (postac.x + postac.width) AND
    mouse.y <= (postac.y + postac.height)
    ) return true;



    --
    Contact: GG#44450, solargrim at gmail.com
    19:16:28 -!- Platyna Erroneous Nickname


  • 7. Data: 2009-07-12 07:45:27
    Temat: Re: [Allegro] Kolizja myszki z obiektem
    Od: Piotr Kulinski <p...@w...pl>

    Sat, 11 Jul 2009 19:54:29 +0200, na pl.comp.programming, Solaris
    napisał(a):

    > Dnia Wed, 8 Jul 2009 11:02:53 +0200, jakże pięknego
    > krzysztof posłuszny <w...@w...pl> wystukał co zawarte poniżej:
    >
    >: Cpostac cel1,kursor1;
    >: bool kolizja(int x1,int y1,int s1,int w1,int x2,int y2,int s2,int w2)
    >: {
    >: if( x2<=x1+s1 && x2>x1 && y2>=y1 && y2<=y1+w1) return true; else
    >: if( x2<=x1+s1 && x2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true; else
    >: if( x2+s2<=x1+s1 && x2+s2>x1 && y2>=y1 && y2<=y1+w1) return true; else
    >: if( x2+s2<=x1+s1 && x2+s2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true;
    >: else return false;
    >
    > A nie prościej tak?
    >
    > if ( mouse.x >= postac.x AND
    > mouse.y >= postac.y AND
    > mouse.x <= (postac.x + postac.width) AND
    > mouse.y <= (postac.y + postac.height)
    > ) return true;

    Skąd zapożyczyłeś 'AND', z SQL-a?
    ;)
    --
    pozdrawiam, GG i SkyPe w X-nagłówku posta, e-mail: zmień wpw na wp
    piotr


  • 8. Data: 2009-07-12 17:14:59
    Temat: Re: [Allegro] Kolizja myszki z obiektem
    Od: Wojciech Muła <w...@p...null.onet.pl.invalid>

    On Sun, 12 Jul 2009 09:45:27 +0200 Piotr Kulinski
    <p...@w...pl> wrote:

    > > A nie prościej tak?
    > >
    > > if ( mouse.x >= postac.x AND
    > > mouse.y >= postac.y AND
    > > mouse.x <= (postac.x + postac.width) AND
    > > mouse.y <= (postac.y + postac.height)
    > > ) return true;
    >
    > Skąd zapożyczyłeś 'AND', z SQL-a?
    > ;)

    Pewnie z C++, bowiem and, or, not (i jeszcze kilka innych)
    to legalne operatory, zastępujące potworki pod tytułem
    !, && i || (fuj, ohyda). Zawsze też można włączyć iso646.h.

    w.

    --
    Kupię: http://wm.ite.pl/kupie.html

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: