Exigo Opublikowano 10 Marca 2012 Udostępnij Opublikowano 10 Marca 2012 Problem istniał od dawna, ale dopiero teraz zaczął mnie wnerwiać. Pytanie klucz: czy istnieje opcja aby pozycja viewa (np. view_xview) miał wartość zmiennoprzecinkową? A chodzi mi o to: Mój problem leży w zoomie, który działa natywnie w bardzo prosty sposób: view_wview = staly_view_wview / zoom; view_hview = staly_view_hview / zoom; (gdzie zoom >= 1) I tyle. Przy przybliżeniu np. dwukrotnym (zoom = 2), kiedy przypiszę wartości view_xview wartość nie-całkowitą, tak czy siak pozycja ekranu zwraca mi wartość zaokrągloną. W efekcie przemieszczanie kamery jest równoznaczne ze "skakaniem" (przez to zaokrąglanie!) co jest bardzo widoczne przy sporym przybliżeniu. Pomysły? ; ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 11 Marca 2012 Autor Udostępnij Opublikowano 11 Marca 2012 Bump. Wymyśliłem żeby dodać zmienną reprezentującą pozycję view-a jako "kamerę". Dokonuje w niej wszelkich obliczeń, i na koniec nadaję pozycje view-om. Potem obliczam różnicę z tego, i na podstawie wyniku rysuję surface ekranu (fun fact, trzymam wszystko w surface) z tym przesunięciem (różnicą). Strata jest w tym, że na krawędziach ekranu są artefakty, ale przynajmniej nie rzuca nim przy dużym przybliżeniu. Tak to mniej więcej wygląda: (pozycja kamery jest centrowana na pozycję gracza) GML view_xview = kamera_x - (view_wview / 2); view_yview = kamera_y - (view_hview / 2); view_wview = startowy_view_wview / kamera_zoom; view_hview = startowy_view_hview / kamera_zoom; kamera_xview_roznica = (view_xview + (view_wview / 2) - kamera_x) * kamera_zoom; kamera_yview_roznica = (view_yview + (view_hview / 2) - kamera_y) * kamera_zoom; draw_surface_ext(ekran, kamera_xview_roznica, kamera_yview_roznica, 1, 1, 0, c_white, 1); Jeśli ktoś wpadnie na inny pomysł, niech pisze. ; ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 11 Marca 2012 Administratorzy Udostępnij Opublikowano 11 Marca 2012 Miałem z tym problem w jednym z dem na tegoroczne GDC - rozwiązałem to tak, że te zmienne z pierwszego posta zapisywałem do innych zmiennych, a dopiero powyżej różnicy 2px przesuwałem view, dzięki czemu tak nie skakało. Czyli upłynniałem ten ruch dodatkowymi zmiennymi. Niestety i tak zdarzały się miejsca, gdzie ekran skakał :( Edit: ah, zmieniałem też hspeed roomu na dodatni, to pomaga na za duże skoki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 11 Marca 2012 Udostępnij Opublikowano 11 Marca 2012 Generalnie skoro używasz surface to myślę, że możesz zrezygnować ze standardowego rysowania na rzecz rysowania wszystkiego na surface. Wtedy w zasadzie robisz co chcesz. Przesuwasz, obracasz, skalujesz. Pamiętaj. d3d_transform... ;) 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ę