peterz_pl Opublikowano 24 Kwietnia 2016 Udostępnij Opublikowano 24 Kwietnia 2016 Cześć. A więc w swojej grze zrobiłem (myślę, że dość "okrężną drogą") stały panel w opcjami (stały tj. przy przesuwaniu ekranu panel jest cały czas na górze ekranu). Do rysowania zastosowałem draw_sprite_ext, ale aby przycisk był "klikalny", położyłem obiekt na tej samej pozycji: Step: GML x=view_xview[0]+6 y=view_yview[0]+6 Problem leży jednak w skalowaniu ekranu (przy użyciu rolki przybliżam i oddalam ekran). Przy pomniejszaniu lub powiększaniu ekranu, obiekt zmienia wielkość. Zgaduję, że można tylko narysować ten przycisk Drawem i zrobić aby był klikalny. But how? ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MaxGaming Opublikowano 24 Kwietnia 2016 Udostępnij Opublikowano 24 Kwietnia 2016 Jeżeli to studio to po prostu walnij do w event "Draw GUI" zamiast "Draw". Jeżeli 8.1 to już musisz wyliczać wielkość, ale żeby Ci więcej powiedzieć muszę wiedzieć w jaki sposób skaluje to. Po prostu skalujesz view, czy jak? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
peterz_pl Opublikowano 24 Kwietnia 2016 Autor Udostępnij Opublikowano 24 Kwietnia 2016 Zgadza się, skaluję view. Pomyślałem o image_x(y)scale (czyli oddala się view to obiekt się powiększa i odwrotnie). Co do Draw GUI, to niestety prawdopodobnie nie wiem jak tego użyć, gdyż teraz jest zarówno narysowany obiekt jak i fizycznie za nim też jest widoczny. @EDIT: Aby rysowane obiekty nie zmieniały wielkości, korzystam z przykładu Gnyska: http://www.gmclan.org/index.php?nius=437 @EDIT2: Rany.. "if mouse_check_button_pressed(mb_left)" w Draw i tyle w temacie. Dzięki za odp. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MaxGaming Opublikowano 24 Kwietnia 2016 Udostępnij Opublikowano 24 Kwietnia 2016 Po prostu tylko GUI wstawiasz do Draw GUI czyli tylko interfejs, resztę do normalnego draw. Wszystko co jest w Draw GUI nie podlega skalowaniu ;) Aha i nie używaj raczej mouse_check_button i innych funkcji po za rysowaniem w evencie draw jeśli nie musisz - obciążasz tylko grafikę, to jest bardzo nie optymalne :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
peterz_pl Opublikowano 25 Kwietnia 2016 Autor Udostępnij Opublikowano 25 Kwietnia 2016 @MaxGaming Dzięki, faktycznie działa. A czy jest możliwość wywołania jakiegoś kodu po najechaniu myszką na narysowany obiekt (w tym przypadku guzik)? Np żeby zmienił wartość zmiennej. Próbowałem czegoś w stylu: GML if position_meeting(mouse_x,mouse_y,self) Ale nie zdało egzaminu. Niestety Event Mouse Enter działa chyba tylko na obiekty. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 25 Kwietnia 2016 Udostępnij Opublikowano 25 Kwietnia 2016 1. Event mouse ->"Left pressed" ? 2. GML if(mouse_x >= x1 && mouse_x <= x2 && mouse_y >= y1 && mouse_y <= y2 && mouse_check_button_pressed(mb_left)) ? 3. GML if(place_meeting(mouse_x, mouse_y, obj) && mouse_check_button_pressed(mb_left)) ? Wybierz sobie :) E:na nie obiekty pan z numerem 2 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
peterz_pl Opublikowano 25 Kwietnia 2016 Autor Udostępnij Opublikowano 25 Kwietnia 2016 Chodzi teraz głównie o mouse_enter i mouse_leave dla Draw. Nie wiem jak to wytłumaczyć ;] Jeżeli chodzi o opcję #2, również z tego korzystałem i była najbliżej celu, tylko że gdy przybliżam lub oddalam mapę (skaluję view) to znowu punkty x1, x2, y1 i y2 się rozjeżdżają (przez co po najechaniu gdzieś obok guzika zmienia się zmienna). Czy można w tym kodzie zastosować aby pomimo skalowania view x1..y2 były stałe? GML if(mouse_x >= STAŁEX1 && mouse_x <= STAŁEX2 && mouse_y >= STAŁEY1 && mouse_y <= STAŁEY2) { zmienna = 1; } Zgaduję, że nie zrozumiecie mojej wypowiedzi, sam ledwo ją rozumiem :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 25 Kwietnia 2016 Udostępnij Opublikowano 25 Kwietnia 2016 Podaj kod na skalowanie viewa Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 25 Kwietnia 2016 Udostępnij Opublikowano 25 Kwietnia 2016 Możesz korzystać z window_mouse_get_x/y()*, niezależnie od zooma zwróci pozycję myszy w osi X/Y relatywnie do lewego górnego rogu okna gry, nie do pozycji (0,0) w samej grze. *albo window_get_mouse_x/y(), nie pamiętam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MaxGaming Opublikowano 25 Kwietnia 2016 Udostępnij Opublikowano 25 Kwietnia 2016 Ale zależnie od kodu skalowania możesz wyliczyć nowy x i y. Podaj kod skalowania jak nie wiesz jak i Ci pomożemy. Ew.tak jak piszę Amaterasu możesz spróbować. Powinno zdać egzamin, chociaż obawiałbym się osobiście jakiś bugów ewntualnych. Zrobiłbym to "staroszkolnie" np. GML x2=szerokosc_sprite*skala; I dla przykładu: GML //x2=szerokosc*skala czyli szerokość to 64, skala 2 więc wysarczy pomnożyć przez skale szerokość x2=64*2; Myślę że dostatecznie prosto wyjaśniłem zasadę działania ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
peterz_pl Opublikowano 26 Kwietnia 2016 Autor Udostępnij Opublikowano 26 Kwietnia 2016 To nie to, że idę na łatwiznę, ale nie mam pojęcia jak to połączyć. Create: GML global.zoom=1; zoom_min=.1; zoom_max=10; base_width=1024; base_height=768; Step: GML if (mouse_wheel_up() && global.zoom<zoom_max) { global.zoom+=.1; event_user(0); } if (mouse_wheel_down() && global.zoom>zoom_min) { global.zoom-=.1; event_user(0); } User Defined 0 GML var _mouse_x,_mouse_y; _mouse_x=(mouse_x-view_xview)/view_wview; _mouse_y=(mouse_y-view_yview)/view_hview; view_wview=base_width/global.zoom; view_hview=base_height/global.zoom; view_xview=mouse_x-view_wview*_mouse_x; view_yview=mouse_y-view_hview*_mouse_y; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MaxGaming Opublikowano 26 Kwietnia 2016 Udostępnij Opublikowano 26 Kwietnia 2016 No to "x2" mnożysz przez "zoom" i tyle filozofii z tym przyciskiem w zasadzie ;) Tzn: GML if(mouse_x >= STAŁEX1 && mouse_x <= STAŁEX2 && mouse_y >= STAŁEY1*zoom && mouse_y <= STAŁEY2*zoom) { zmienna = 1; } Swoją drogą polskie znaki w nazwie zmiennej to coś czego nie polecałbym jednak :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
peterz_pl Opublikowano 28 Kwietnia 2016 Autor Udostępnij Opublikowano 28 Kwietnia 2016 Hasa :) Dziękuję za pomoc ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę