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

Allegro, problem z myszką

Ostatnio zmodyfikowano 2008-10-17 15:28
Autor Wiadomość
programista12
Temat założony przez niniejszego użytkownika
Allegro, problem z myszką
» 2008-10-09 16:23:17
Witam!
Robię swoją pierwszą mini-grę w Allegro i mam pytanie. Chcę zrobić tak, żeby po kliknięciu na obrazek np. znikał, ale nie wiem jakim poleceniem sprawdzać zdarzenie kliknięcia n obrazku. Czytałem dokładnie kurs Allegro o myszce, ale jedyne co znalazłem to jak pokazywać kod przycisku myszki. Proszę o pomoc.
P-1921
DejaVu
» 2008-10-09 16:28:54
Mniejwięcej musisz to zrobić tak:
C/C++
if(
myszka.x >= obrazek.x &&
myszka.x <= obrazek.x + obrazek.szerokosc &&
myszka.y >= obrazek.y &&
myszka.y <= obrazek.y + obrazek.wysokosc &&
myszka.wcisniety_przycisk == 1
)
{
    ukryj_obrazek = true;
}
if( ukryj_obrazek == false )
{
    //tutaj wyświetlanie obrazka
}
Oczywiście nazwy zmiennych itp. musisz podstawić własne.

P-1922
programista12
Temat założony przez niniejszego użytkownika
» 2008-10-10 09:07:12
Wklejam kod programu
C/C++
#include <allegro.h>
int main()
{
    //INICJALIZACJE(POCZĄTEK) 
    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 ) );
    //INICJALIZACJE(KONIEC)
   
    //INICJALIZACJA OBRAZKÓW(POCZĄTEK)
    BITMAP * kolor1 = NULL;
    BITMAP * kolor2 = NULL;
    BITMAP * kolor3 = NULL;
    BITMAP * kolor4 = NULL;
    //INICJALIZACJA OBRAZKÓW(KONIEC)
   
    //DEKLARACJA OBRAZKÓW(POCZĄTEK)
    kolor1 = load_bmp( "kolor_1.bmp", default_palette );
    kolor2 = load_bmp( "kolor_2.bmp", default_palette );
    kolor3 = load_bmp( "kolor_3.bmp", default_palette );
    kolor4 = load_bmp( "kolor_4.bmp", default_palette );
    //DEKLARACJA OBRAZKÓW(KONIEC)
   
    //GDY NIE MA OBRAZKÓW (POCZĄTEK)
    if( !kolor1 ) {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "NIE MOGE ZALADOWAC OBRAZKA KOLOR_1.BMP!!!" );
        allegro_exit();
        return 0;
    }
    if( !kolor2 ) {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "NIE MOGE ZALADOWAC OBRAZKA KOLOR_2.BMP!!!" );
        allegro_exit();
        return 0;
    }
    if( !kolor3 ) {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "NIE MOGE ZALADOWAC OBRAZKA KOLOR_3.BMP!!!" );
        allegro_exit();
        return 0;
    }
    if( !kolor4 ) {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "NIE MOGE ZALADOWAC OBRAZKA KOLOR_4.BMP!!!" );
        allegro_exit();
        return 0;
    }
    //GRY NIE MA OBRAZKÓW (KONIEC)
   
    //WYŚWIETLANIE OBRAZÓW(POCZĄTEK)           
    blit( kolor1, screen, 0, 0, 100, 100, kolor1->w, kolor1->h );
    blit( kolor2, screen, 0, 0, 132, 100, kolor2->w, kolor2->h );
    blit( kolor3, screen, 0, 0, 164, 100, kolor3->w, kolor3->h );
    blit( kolor4, screen, 0, 0, 197, 100, kolor4->w, kolor4->h );
    //WYŚWIETLANIE OBRAZÓW (KONIEC)
   
    //NISZCZENIE BITMAP Z PAMIĘCI(POCZĄTEK)
    destroy_bitmap( kolor1 );
    destroy_bitmap( kolor2 );
    destroy_bitmap( kolor3 );
    destroy_bitmap( kolor4 );
    //NISZCZENIE BITMAP Z PAMIĘCI(KONIEC)
   
    readkey();
   
    allegro_exit();
    return 0;
}
END_OF_MAIN();
I teraz jak zrobić procedurę kliknięcia? Proszę o dokładniejsze wyjaśnienie, bo nie za bardzo zrozumiałem poprzednią odpowiedź. Oczywiście gra jest niedokończona ze względu na powyższy problem.
P-1936
lynx
» 2008-10-10 21:16:26
Przeczytaj dokładnie kurs Allegro o myszce.  Przedewszystkim odpal przykłady z kursu, a się wiele dowiesz.

Bardzo ważny jest ten kod w tutorialu, bez niego nie zrobisz myszki ;p :
C/C++
#include <allegro.h>

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;
    }
}

mouse_b - to jest zmienna, która przechowuje informacje o przyciśniętych przyciskach myszki. Jaka liczba odpowiada jakiemu przyciskowi sprawdzisz w tutorialu.

Pewnie chceż też wiedzieć na czym polega funkcja sprawdzająca czy klikasz na przycisk. Otóż jest zyczajne sprawdzanie kolizji, tylko jako parametry jednego obiektu podstawiasz odpowiednie zmienne myszki. Więcej o kolizjach w Allegro tutaj: http://www.easykoder.yoyo.pl/index.php?mm=kol
P-1944
programista12
Temat założony przez niniejszego użytkownika
» 2008-10-15 15:48:55
OK. Teraz robię procedurę zdarzenie kliknięcia na obrazek. Oto jego kod:
C/C++
//KLIKNIĘCIE NA OBRAZEK 'KOLOR1.BMP'(POCZĄTEK)
if( mouse_x == 100 || mouse_x < 131 && mouse_y = 100 || mouse_b = 1 ) {
    kolor1 = load_bmp( "kolor_1_klik.bmp", default_palette );
}
//KLIKNIĘCIE NA OBRAZEK 'KOLOR1.BMP'(KONIEC)
Próbuję skompilować program, ale wywala mi błędy:
" D:\Programowanie\C++\Dev-C++\Kolory\main.cpp In function `int _mangled_main()': "
"91 D:\Programowanie\C++\Dev-C++\Kolory\main.cpp non-lvalue in assignment"
" D:\Programowanie\C++\Dev-C++\Kolory\Makefile.win [Build Error]  [main.o] Error 1 ".
O co chodzi?
P-2053
lynx
» 2008-10-16 21:09:45
Błądna jest moim zdaniem instrukcja if:

C/C++
if( mouse_x == 100 || mouse_x < 131 && mouse_y = 100 || mouse_b = 1 )
{ }
Powinno być "==" 2 razy zamiast "=".


Więc instrukcja powinna  wyglądać tak:
C/C++
if( mouse_x == 100 || mouse_x < 131 && mouse_y == 100 || mouse_b == 1 )
{ }


Spróbuj tak skompilować, z dwóch powodów:
-tak jak mówiłem program by źle działał
-mouse_b jest to zmienna allegro może być ona niedostępna do zmiany, więc też powinno być "==".


Czy masz na samym początku funkcję show_mouse(); ?
P-2102
programista12
Temat założony przez niniejszego użytkownika
» 2008-10-17 08:24:29
Teraz po zmianach kodu program się kompiluje, ale procedura zmiany obrazka nie działa tzn. nie ma obrazka z białym obramowaniem. Co zrobić? Oto kod:
C/C++
//KLIKNIĘCIE NA OBRAZEK 'KOLOR1.BMP'(POCZĄTEK)
myszka();
if( mouse_x == 100 || mouse_x < 131 && mouse_y == 100 || mouse_b == 1 ) {
    kolor1 == load_bmp( "kolor_1_klik.bmp", default_palette );
}
//KLIKNIĘCIE NA OBRAZEK 'KOLOR1.BMP'(KONIEC)
P-2125
DejaVu
» 2008-10-17 10:58:05
Zastanów się więc co robi kod, który napisałeś między klamrami.
P-2127
« 1 » 2
  Strona 1 z 2 Następna strona