Skocz do zawartości

Menu nie na obiektach a na draw_sprite


TO_mek

Rekomendowane odpowiedzi

Witam!

Robię menu składające się z kilku guzików ale nie na obiektach a na sprajtach rysowanych przez draw. Jak powinienem wykrywać kolizję klikania na danym guziku? Czy w poniższy sposób czy też jest jakiś prostszy?

 

1.rysuję kilka guzików za pomocą draw_sprite, guziki to prostokąty o tych samych wymiarach, origin w lewym, górnym rogu (x1,y1).

2.w obiekcie rysowania (bądź dowolnym innym który jest na roomie) w evencie myszy global_left_pressed pobieram wspólrzędne kursora myszki,

3.sprawdzam po kolei czy wartości x,y myszy znajdują się w obrębie narysowanych guzików menu - robię to ręcznie coś na zasadzie jeśli (xmyszki > x1 i < niż x1+szerokość guzika) AND (ymyszki > y1 i < niż y1+wysokosc guzika) to kliknięto guzik A itd.

 

Pytanie czy nie ma może w GM8 gotowej komendy do sprawdzania klikniecia rejonu x1,y1,x1+szerokosc,y1+wysokosc?

 

A może zrobić to inaczej (nie chcę robić osobnych obiektów na poszczególne guziki).

Odnośnik do komentarza
Udostępnij na innych stronach

Nie ma takiej funkcji, ale możesz sobie ją napisać samemu:

Stwórz nowy skrypt np. mouse_region

GML
// mouse_region( x1, y1, x2, y2 )

return ( mouse_x > argument0 && mouse_x < argument2 && mouse_y > argument1 && mouse_y < argument3 );

 

Spoko. Chciałem się tylko upewnić że nic takiego nie ma coby nie wywarzać otwartych drzwi (a raczej malutkich drzwiczek ;) )

Odnośnik do komentarza
Udostępnij na innych stronach

Możesz jeszcze zrobić tak. Nazywasz obiekt "guziki" (albo inaczej). Ustawiasz mu sprite, w którym będą wszystkie grafy guzików. Wstawiasz obiekt ten, na przykład, jeden pod drugim co 32 px. W CREATE dajesz kod:

GML
image_speed=false;

image_index=(y-yyyyyy)/32;

Pod yyyyyy wstawiasz y obiektu guzik, który jest najwyżej w roomie. Jak widzisz pod image_index będą wpisywane liczy 0,1,2,3... .Potem w evetcie z naciskaniem myszy:

GML
if(image_index==0)

{

//akcja 1

}

else if(image_index==1)

{

//akcja 2

}

//itd</span>

Musisz tylko pamiętać, że ustawienie guzików, względem siebie, musi być liniowe. To znaczy, że muszą być oddalone od siebie o tą samą wartość x albo y, bo inaczej kod nie zadziała.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...