nowy_user Opublikowano 23 Czerwca 2017 Udostępnij Opublikowano 23 Czerwca 2017 Hej, próbuję stworzyć zoomowanie w moim programie, i niestety napotkałem na mały problem. Użyłem następującego codu: GML if mouse_wheel_up() Zoom-=0.1; if mouse_wheel_down() Zoom+=0.1; view_wview[0] = room_width * (Zoom); view_hview[0] = room_height * (Zoom); Faktycznie, program zoomuję i oddala, ale robi to w taki sposób, że punktem skupienia zoomowania i oddalania jest lewy górny róg. Ja preferowałbym środek viewa, lub jeszcze lepiej punkt (mouse_x,mouse_y) Chęci są, żeby to zrobić, tylko wiedzy brak... Z pozdrowieniami, Nowy User! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 23 Czerwca 2017 Udostępnij Opublikowano 23 Czerwca 2017 Za kazdym razem gdy zmienisz zoom musisz wysrodkowac o roznice miedzy obecnym zoomem a poprzednim. GML (create) //Stworz zmienne: Zoom = 1; LastZoom = 1; GML (step) //Krok 1, zmien wartosc zoom if mouse_wheel_up() Zoom-=0.1; if mouse_wheel_down() Zoom+=0.1; //Krok 2, sprawdz czy doszlo do zmiany: if Zoom!=LastZoom{ //Krok 2.1, Zapisz sobie jak duzy byl stary zoom: var StaryW = view_wview[0]; var StaryH = view_hview[0]; //Krok 2.2, Zmien przyblizenie view_wview[0] = room_width * (Zoom); view_hview[0] = room_height * (Zoom); //Krok 2.3, Oblicz roznice wielkosci zooma w pikselach var RoznicaX = view_wview[0] - StaryW; var RoznicaY = view_hview[0] - StaryH; //Krok 2.4, Przesun view o polowe roznicy. view_xview[0] -= RoznicaX/2; view_yview[0] -= RoznicaY/2; } //Krok 3: Zaktualizuj LastZoom LastZoom = Zoom; Działa to tak: Wyliczamy różnicę między nowym a starym zoomem i bierzemy połowę tej wartości aby o tę połowę przesunąć obraz. Wtedy jest wycentrowany. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 26 Czerwca 2017 Autor Udostępnij Opublikowano 26 Czerwca 2017 Dziękuję za kod, działa wyśmienicie w momencie, gdy rozmiar roomu jest taki sam jak rozmiar viewa. W momencie gdy room jest szerszy niż szerokość viewa, to przy pierwszym przybliżeniu/oddaleniu , obraz robi się rozciągnięty, i analogicznie , gdy room jest węższy niż szerokość viewa, to obraz robi się spłaszczony tzn rozciągnięty wertykalnie. :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 26 Czerwca 2017 Udostępnij Opublikowano 26 Czerwca 2017 Jest to związane z wymaganiami które postawiłeś, czyli zoom na podstawie wielkości rooma. Trzeba sposob zooma zmienić aby działało. Najlepiej zapisz do zmiennych wymiary wview i hview początkowego(zoom 100%) i mnóż przez tę wartość zamiast wielkość roomu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Czerwca 2017 Administratorzy Udostępnij Opublikowano 26 Czerwca 2017 Proporcje już sobie dopisz sam :) 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ę