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

C++ allegro myszka

Ostatnio zmodyfikowano 2010-04-07 00:09
Autor Wiadomość
Bartaz
Temat założony przez niniejszego użytkownika
C++ allegro myszka
» 2010-04-05 13:00:33
Witam mam taki problem bo chce ,że jezeli myszka znajdzie się na bitmapie przycisk
to cos tam(tu akurat jest ,że ta bitmapa ma się przesunąć...zeby sprawdzic czy dziala)
Ale ani bitmapa sie nie przesówa a jak daje żeby pokazywało x i y myszki to jest napis ale pozycja wcale się nie zmienia.
Kod:
C/C++
#include <allegro.h>

BITMAP * bufor = NULL;
BITMAP * gui = NULL;
BITMAP * przycisk = NULL;
class pozycje
{
public:
    int x;
    int y;
    int w;
    int s;
};


int a = 170;
int b = 30;
int c = 70;

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();
    install_timer();
    set_gfx_mode( GFX_AUTODETECT, 500, 150, 0, 0 );
   
    pozycje przyciska;
   
    przyciska.x = 3, przyciska.y = 0, przyciska.w = 30, przyciska.s = 70;
   
    bufor = create_bitmap( 500, 150 );
    gui = create_bitmap( 500, 30 );
    przycisk = create_bitmap( 70, 70 );
   
    clear_to_color( bufor, makecol( 150, 150, 150 ) );
    clear_to_color( gui, makecol( 100, 100, 100 ) );
    clear_to_color( przycisk, makecol( 10, 100, 70 ) );
   
    while( !key[ KEY_ESC ] )
    {
        myszka();
        textprintf_ex( bufor, font, 20, 40, makecol( 30, 200, 30 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !", mx, my, mb );
       
        if( mx > przyciska.x && mx < przyciska.x + przyciska.w &&
        my > przyciska.y && my < przyciska.y + przyciska.s )
        {
            przyciska.x++;
        }
        masked_blit( gui, bufor, 0, 0, 0, 0, 500, 150 );
        masked_blit( przycisk, bufor, 0, 0, przyciska.x, przyciska.y, przyciska.s, przyciska.w );
        textout_ex( bufor, font, "PLAY", 20, 10, makecol( 170, 30, 70 ), - 1 );
        blit( bufor, screen, 0, 0, 0, 0, 500, 150 );
    }
    allegro_exit();
    return( 0 );
}
END_OF_MAIN();
P-15827
szyx_yankez
» 2010-04-05 13:36:38
C/C++
bool button( int x, int y, BITMAP * bmp )
{
    if( mouse_x > x && mouse_x < x + bmp->w && mouse_y > y && mouse_y < y + bmp->h )
    return true; else return false;
}

int x( 100 ), y( 100 );
BITMAP * obrazek = NULL;
obrazek = create_bitmap( 1023, 767 );

while( !keypressed() )
{
    if( button( x, y, obrazek ) == true )
         x++;
   
    blit( obrazek, bufor, 0, 0, x, y, 1023, 767 );
}
P-15828
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-04-05 13:46:22
Ale to by działało tylko , że jak chce wyswietlic pozycje x  i  y myszki to ta pozycja wogóle sie nie zmienia nie wyswietla ise nowa kiedys tez tak mialem ale nie pamietam jak zrobilem ze dzialalo...
P-15829
driver1995
» 2010-04-05 15:22:23
Wszystko wyjaśnione w komentarzach........
C/C++
#include <allegro.h>

BITMAP * bufor = NULL;
BITMAP * gui = NULL;
BITMAP * przycisk = NULL;
class pozycje
{
public:
    int x;
    int y;
    //int w; - niepotrzebne
    //int s; - niepotrzebne
};


//int a=170; - niepotrzebne
//int b=30; - niepotrzebne
//int c=70; - niepotrzebne

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


int main()
{
    allegro_init();
    install_keyboard();
    install_mouse(); //Jak chciałeś robić cokolwiek z myszką bez tego polecenia?
    //install_timer(); - niepotrzebne
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 500, 150, 0, 0 ); //użycie windowed usuwa problemy przy otwarciu (migajacy ekran i dopiero potem włączenie)
   
    pozycje przyciska;
   
    przyciska.x = 3, przyciska.y = 0;
   
    bufor = create_bitmap( 500, 150 );
    gui = create_bitmap( 500, 30 );
    przycisk = create_bitmap( 70, 30 ); //y=30 (żeby ładnie wyglądało na gui...
   
    clear_to_color( bufor, makecol( 150, 150, 150 ) );
    clear_to_color( gui, makecol( 100, 100, 100 ) );
    clear_to_color( przycisk, makecol( 10, 100, 70 ) );
   
    while( !key[ KEY_ESC ] )
    {
        clear_to_color( bufor, makecol( 150, 150, 150 ) ); //czyszczenie bufora... W przeciwnym wypadku liczby pozycji nakładały by się na siebie
        textprintf_ex( bufor, font, 20, 40, makecol( 30, 200, 30 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !", mouse_x, mouse_y, mouse_b ); //użycie mouse_x itp. Bo robienie mx to zbędna robota
       
        if( mouse_x > przyciska.x && mouse_x < przyciska.x + przycisk->w &&
        mouse_y > przyciska.y && mouse_y < przyciska.y + przycisk->h ) //zamiast przyciska.w jest tak
        {
            przyciska.x++;
        }
        masked_blit( gui, bufor, 0, 0, 0, 0, 500, 150 );
        masked_blit( przycisk, bufor, 0, 0, przyciska.x, przyciska.y, przycisk->w, przycisk->h );
       
        textout_ex( bufor, font, "PLAY", 20 + przyciska.x, 10 + przyciska.y, makecol( 170, 30, 70 ), - 1 ); //+przyciska (żeby napis "PLAY" przesuwał się razem z przyciskiem
        show_mouse( bufor ); //no myszkę wypadało by pokazać...
        blit( bufor, screen, 0, 0, 0, 0, 500, 150 );
    }
    allegro_exit();
    return( 0 );
}
END_OF_MAIN();
P-15831
malan
» 2010-04-07 00:09:27
@Bartaz: Działa? :)
// Rozumiem, że tak. Zamykam.
P-15897
« 1 »
  Strona 1 z 1