Skocz do zawartości

problem z przyblizaniem/oddaleniem


Nubosabuk

Rekomendowane odpowiedzi

W stepie mam kod (zamieszczony poniżej). Składa się on z dwóch części: jedna zajmuje się przybliżaniem/oddalaniem w momencie gdy aktualnie znajdujemy się w układzie planetarnym, a druga część zajmuje się tym samym, lecz gdy znajdujemy się w przestrzeni między-gwiezdnej. Obie części są IDENTYCZNE, różnią się tylko jedną zmienną.

W eventach Mouse Wheel Up / Mouse Wheel Down zmieniają się zmienne: zoom_ukl (jeśli w układzie) i global.zoom (jeśli w galaktyce)- wartości zmieniają się o 1 co ruch kółkiem myszy . W momencie zmiany tych zmiennych kod ma płynnie dokonać przybliżenia lub oddalenia wykorzystując do tego zmienną przyblizenie.

 

Teraz czas na problem: w widoku galaktyki wszystko działa tak jak chcę, a w widoku układu w momencie przybliżania gdy, zmienna przyblizenie osiągnie wartość 53, zaczyna zmieniać wartość co step z 53 na 53.1 potem znów 53 itd. i dzieje się tak z każdą kolejną wartością: 52, 51 aż do 1. Może jeszcze dodam że wartością początkową dla zoom_ukl jest 59 ( gdy pojawiamy się w układzie to widzimy od razu cały układ) a jedynka oznacza, że mamy przybliżoną planetę(i statek) na maxa. Nie wiem czy jest to zrozumiałe, w razie czego postaram się coś dopowiedzieć.

 

GML
if global.zoom==0

{

//oddalanie/przyblizanie w ukladzie planetarnym

if przyblizenie==zoom_ukl

{

//nic tu nie ma

}

else if przyblizenie > zoom_ukl

{

przyblizenie-=0.1;

}

else

{

przyblizenie+=0.1;

}

view_wview[2]=global.view0_w*przyblizenie;

view_hview[2]=global.view0_h*przyblizenie;

//centrowanie widoku na statku

if instance_exists(obj_statek1)

{

view_xview[2]=obj_statek1.x-view_wview[2]/2;

view_yview[2]=obj_statek1.y-view_hview[2]/2;

}

}

else

{

//oddalanie/przyblizanie w galaktyce

if przyblizenie==global.zoom

{

//nic tu nie ma

}

else if przyblizenie > global.zoom

{

przyblizenie-=0.1;

}

else

{

przyblizenie+=0.1;

}

view_wview[0]=global.view0_w*przyblizenie;

view_hview[0]=global.view0_h*przyblizenie;

//centrowanie widoku na statku

if instance_exists(obj_statek1)

{

view_xview[0]=obj_statek1.x-view_wview[0]/2;

view_yview[0]=obj_statek1.y-view_hview[0]/2;

}

//info ze teraz widok 0 jest widoczny

global.widok=0;

}

Odnośnik do komentarza
Udostępnij na innych stronach

próbowałeś tak?

GML
if przyblizenie==zoom_ukl

{

//nic tu nie ma

}

else

{

if przyblizenie > zoom_ukl

{

przyblizenie-=0.1;

}

else

{

przyblizenie+=0.1;

}

}

Chodź to w sumie nie powinno mieć znaczenia ale warto spróbować.

 

zmienna przyblizenie osiągnie wartość 53, zaczyna zmieniać wartość co step z 53 na 53.1 potem znów 53 itd. i dzieje się tak z każdą kolejną wartością: 52, 51 aż do 1.

Tu jest dla mnie niejasność, najpierw mówisz że wartości oscylują 53, 53.1, 53, 53.1 a dalej dodałeś że dzieje się tak z każdą kolejną wartością czyli jednak nie oscylują tylko spadają poprawnie?

Odnośnik do komentarza
Udostępnij na innych stronach

spróbuję tak jak napisałeś (EDIT: spróbowałem i nie działa). A z tymi wartościami to tak: zmienna zoom_ukl zmienia się poprawnie, w momencie ruszania kółkiem myszy, natomiast zmienna przyblizenie co step zwiększa się/zmniejsza się o 0.1 jeśli nie jest ona równa zoom_ukl. W momencie wyrównania się wartości zmiennej przyblizenie z tą drugą, gdy wartość zmiennej przybliżenie jest mniejsza równa niż 53, zaczyna ona oscylować wokół tej wartości. Np dla wartości zoom_ukl==10, przyblizenie będzie się zmieniać z 10 na 10.1 i tak w kółko.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja bym to zrobił tak:

GML
if ( mouse_wheel_down() ) zoom -= 1;

if ( mouse_wheel_up() ) zoom += 1;

 

var _diff;

_diff = actual_zoom - zoom;

 

actual_zoom -= (_diff)/3

https://gmclan.org/up539_14_p_ynna_zmiana_warto_ci.html

 

Edit: zrobiłem tym sposobem ładny efekt graficzny, jakąś super nowę czy coś, może ci się przyda https://gmclan.org/up539_4_supernowa.html

Odnośnik do komentarza
Udostępnij na innych stronach

Ja bym to zrobił tak:

GML
if ( mouse_wheel_down() ) zoom -= 1;

if ( mouse_wheel_up() ) zoom += 1;

 

var _diff;

_diff = actual_zoom - zoom;

 

actual_zoom -= (_diff)/3

https://gmclan.org/up539_14_p_ynna_zmiana_warto_ci.html

 

Edit: zrobiłem tym sposobem ładny efekt graficzny, jakąś super nowę czy coś, może ci się przyda https://gmclan.org/up539_4_supernowa.html

Ten sposób wygląda fajnie, wypróbuję.

Super efekt Ci wyszedł:) nie myślałem że jednym sprajtem można tak wiele osiągnąć

 

Dzięki:)

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