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

[Allegro] Kolizja z wykorzystaniem getpixel

Ostatnio zmodyfikowano 2009-09-03 21:04
Autor Wiadomość
szyx_yankez
Temat założony przez niniejszego użytkownika
[Allegro] Kolizja z wykorzystaniem getpixel
» 2009-09-02 16:46:13
Witam wszystkich.
Najpierw podam kod.



C/C++
if( poziom == 0 )
{
    blit( map, bufor, 0, 0, 0, 0, map->w, map->h );
    if( getpixel( map, mx + 32, my + 32 ) == makecol( 255, 0, 255 ) )
    {
        poziom = 1;
        mx = 200;
        my = 900;
    }
}
if( poziom == 1 )
{
    blit( map1, bufor, 0, 0, 0, 0, map1->w, map1->h );
   
}

Otóż kompilator chyba nie widzi tego
C/C++
mx = 200;
my = 900;
Poniewaz gdy zostanie wykryta kolizja getpixel
owszem inna bitmapa sie wyswietla jednak kursor nie zmienia swojej pozycji co jest nie tak prosze o pomoc.
 

xd.

//Od pixelmaster`a: Tworząc nowy wątek warto nadać mu jakiś tytuł...
//Od admina: jak dopisujesz temat pixelmaster to staraj się nie robić w nim błędów ortograficznych ;p
P-10002
DejaVu
» 2009-09-02 17:04:23
Kompilator kompiluje, a jeśli kompiluje to znaczy, że zmienna istnieje. Z Twojego opisu wynika jasno, że aplikacja się uruchamia, ale coś 'nie działa'. Innymi słowy Twój algorytm jest nieprawidłowy.
P-10003
WunM
» 2009-09-02 17:05:36
Otóż kompilator chyba nie widzi tego

Jeszcze nie widziałem ślepego kompilatora. Piszesz brail`em?
P-10004
malan
» 2009-09-02 18:00:15
Umieściłeś funkcje mouse() (tak się chyba nazywała) po sprawdzeniu warunku ?
P-10005
szyx_yankez
Temat założony przez niniejszego użytkownika
» 2009-09-02 18:24:24
Fajnie jest 6 postów, mój z wyjasnieniem na czym polega problem, Piotra i malana które wydawaly by sie mieć jakiś sens i pasować do tematu.
A reszta zadaje jakieś głupie pytania.

C/C++
Kompilator kompiluje, a je ś li kompiluje to znaczy, ż e zmienna istnieje.Z Twojego opisu wynika jasno, ż e aplikacja si ę uruchamia, ale co ś 'nie działa'.Innymi s ł owy Tw ó j algorytm jest nieprawid ł owy.
Skoro kompilator zmienia wartość zmiennej poziom to czego nie zmienia wartośći zmiennych mx i my ?


C/C++
Jeszcze nie widzia ł em ś lepego kompilatora.Piszesz brail ` em ?
Chyba każdy widzi ,że to nie brail tylko język polski.
Owszem może jest kilka błędów ale jak jest 1 czy 2 błędy aty już myslisz że to
brail to idź na lekcje polskiego i naucz się odróżniać język polski od braila


C/C++
Hej, pixelmaster, to ty wymy ś li ł e ś ten temat ?

Dam ci krótki poradnik gdy wejdziesz na forum główne i wejdziesz np do działu
Biblioteki C/C++ to w trzeciej kolumnie wyraźnie po polsku napisane jest Autor i pisze obok mojego tematu szyx_yankez to chyba jasne ,że pixelmaster tego temetu nie wymyslił. Chyba ,że chodził ci o tytuł wiadomości bo owszem to on zmienił tytuł, jeżeli chodzilo ci o to to pisz jaśniej .




Jednak nadal proszę o pomoc oto kod programu.
C/C++
#include <allegro.h>

//////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
BITMAP * kursor;

void laduj_kursor()
{
    kursor = load_bitmap( "kursor.bmp", NULL ); ///funkcja na wlasny kursor
    if( !kursor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie moge zaladowac grafiki ( kursor )" );
        allegro_exit();
    }
};
////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
int mx = 500, my = 500, mb = 0;
void myszka()
{
    if( mx != mouse_x || my != mouse_y || mb != mouse_b ) //zmienne do myszki
    {
        mx = mouse_x;
        my = mouse_y;
        mb = mouse_b;
    }
};
/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
volatile long speed = 0; ////////////////

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

LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );
////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////
int main()

{
    allegro_init();
    install_keyboard();
   
   
   
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 1280, 1024, 0, 0 );
    clear_to_color( screen, makecol( 255, 255, 255 ) );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 100 ) );
   
    //////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////
    BITMAP * bufor = NULL;
    BITMAP * map = NULL;
    BITMAP * menu = NULL;
    BITMAP * wsk = NULL;
    BITMAP * nie = NULL;
    BITMAP * map1 = NULL;
   
   
    bufor = create_bitmap( 1280, 1024 );
    show_mouse( map );
   
    map = load_bmp( "map.bmp", default_palette );
    menu = load_bmp( "menu.bmp", default_palette );
    wsk = load_bmp( "wsk.bmp", default_palette );
    nie = load_bmp( "nie.bmp", default_palette );
    map1 = load_bmp( "map1.bmp", default_palette );
   
   
    ///////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////// 
    /////////////////////////////////////
    laduj_kursor();
    install_mouse();
    show_mouse( map ); /////////////do myszy
    set_mouse_sprite( kursor );
    unscare_mouse();
    myszka();
    //////////////////////////////////// 
    ///////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////  
   
    int czas = 0;
    int wsky = 230;
    int poziom = 0;
   
   
   
    while( !key[ KEY_Q ] )
    {
       
       
       
       
        while( !key[ KEY_ENTER ] )
        {
            clear_to_color( bufor, makecol( 111, 133, 255 ) );
           
           
            blit( menu, bufor, 0, 0, 0, 0, menu->w, menu->h );
            masked_blit( wsk, bufor, 0, 0, 230, wsky, wsk->w, wsk->h );
           
           
           
            if( key[ KEY_DOWN ] )
            {
                rest( 150 );
                if( wsky == 230 ) wsky = 330; else
                if( wsky == 330 ) wsky = 430; else
                if( wsky == 430 ) wsky = 530; else
                if( wsky == 530 ) wsky = 630;
               
            }
            if( key[ KEY_UP ] )
            {
                rest( 150 );
                if( wsky == 630 ) wsky = 530; else
                if( wsky == 530 ) wsky = 430; else
                if( wsky == 430 ) wsky = 330; else
                if( wsky == 330 ) wsky = 230;
               
            }
           
           
           
            blit( bufor, screen, 0, 0, 0, 0, 1280, 1024 );
           
        }
        ///////////////////////////////////////////////////////// 
        ///////////////////////////////////////////////////////  
        //////////////////////////////////////////////////////  
       
       
        while( !key[ KEY_ESC ] )
        {
            clear_to_color( bufor, makecol( 111, 133, 255 ) );
            myszka();
           
            show_mouse( map );
           
            blit( map, bufor, 0, 0, 0, 0, map->w, map->h );
            if( getpixel( map, mx + 32, my + 32 ) == makecol( 0, 0, 0 ) || getpixel( map, mx - 2, my - 2 ) == makecol( 0, 0, 0 ) )
            {
                blit( nie, bufor, 0, 0, 100, 100, nie->w, nie->h );
               
               
            }
           
            if( poziom == 0 )
            {
                blit( map, bufor, 0, 0, 0, 0, map->w, map->h );
                if( getpixel( map, mx + 32, my + 32 ) == makecol( 255, 0, 255 ) )
                {
                    poziom = 1;
                    mx = 200;
                    my = 900;
                }
            }
            if( poziom == 1 )
            {
                blit( map1, bufor, 0, 0, 0, 0, map1->w, map1->h );
               
            }
           
           
           
            blit( kursor, bufor, 0, 0, mx, my, kursor->w, kursor->h );
            blit( bufor, screen, 0, 0, 0, 0, 1280, 1024 );
            clear_keybuf();
        }
    }
   
    ///////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////
    /////////////////////////////////////////////////////
    ////////////////////////////////////////////////////
   
    destroy_bitmap( map );
    destroy_bitmap( bufor );
    destroy_bitmap( kursor );
    destroy_bitmap( wsk );
    destroy_bitmap( menu );
    destroy_bitmap( map1 );
   
   
    readkey();
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-10007
malan
» 2009-09-02 19:04:07
Chyba znalazłem ;p.

Spójrz:

C/C++
show_mouse( map ); // wyświetlasz myszkę na 'map' 
if( poziom == 0 )
{
    //...
}
if( poziom == 1 )
{
    blit( map1, bufor, 0, 0, 0, 0, map1->w, map1->h ); // wyświetlasz drugą mapę hmm..., ale mysz cały czas jest wyświetlana na 'map' ? Najlepiej wyświetlaj ją na 'bufor' lub daj: show_mouse(map1);
}
P-10010
szyx_yankez
Temat założony przez niniejszego użytkownika
» 2009-09-02 19:15:04
Chyba jednak nie znalazles poniewaz nie mam problemu z wyswietlaniem wlasnego kursora na map1 poniewaz wyswitla sie mi on na map i na map1.
Jednak nie mogę zmienić wartosci zmiennych mx i my.


Nadal prosze o pomoc xd)**
P-10013
malan
» 2009-09-02 19:20:16
Kuuurde no xd... To może zamień mx i my na mouse_x, mouse_y... ;p.
P-10014
« 1 » 2 3
  Strona 1 z 3 Następna strona