Skocz do zawartości
nowy_user

Zoomowanie - nie do końca tak jakbym chciał

Rekomendowane odpowiedzi

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!

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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.

 

cne0ds3c.png

wlfn88ko.png

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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. :(

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×