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. |
|
DejaVu |
» 2008-10-09 16:28:54 Mniejwięcej musisz to zrobić tak: 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 ) { }
Oczywiście nazwy zmiennych itp. musisz podstawić własne. |
|
programista12 Temat założony przez niniejszego użytkownika |
» 2008-10-10 09:07:12 Wklejam kod programu #include <allegro.h> 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 ) ); BITMAP * kolor1 = NULL; BITMAP * kolor2 = NULL; BITMAP * kolor3 = NULL; BITMAP * kolor4 = NULL; 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 ); 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; } 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 ); destroy_bitmap( kolor1 ); destroy_bitmap( kolor2 ); destroy_bitmap( kolor3 ); destroy_bitmap( kolor4 ); 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. |
|
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 : #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 |
|
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: if( mouse_x == 100 || mouse_x < 131 && mouse_y = 100 || mouse_b = 1 ) { kolor1 = load_bmp( "kolor_1_klik.bmp", default_palette ); }
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? |
|
lynx |
» 2008-10-16 21:09:45 Błądna jest moim zdaniem instrukcja if: 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: 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(); ? |
|
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: myszka(); if( mouse_x == 100 || mouse_x < 131 && mouse_y == 100 || mouse_b == 1 ) { kolor1 == load_bmp( "kolor_1_klik.bmp", default_palette ); }
|
|
DejaVu |
» 2008-10-17 10:58:05 Zastanów się więc co robi kod, który napisałeś między klamrami. |
|
« 1 » 2 |