Napisałem klasę view_port dla klasy do gry 2D. Panoramowania (za pomocą klawiszy strzałek) i powiększanie (z kółkiem myszy) działają dobrze, ale chciałbym pogląd również domu kierunku gdziekolwiek kursor znajduje się, podobnie jak w Google Maps or Supreme CommanderPowiększyć w kierunku myszy (np. Mapy Google)
będę oszczędzić specyfiki tego, w jaki sposób zoom jest zaimplementowany, a nawet jakiego języka używam: to wszystko nie ma znaczenia. Ważna jest funkcja zoom, która modyfikuje strukturę prostokąta (x, y, w, h), która reprezentuje widok. Dotychczas kod wygląda następująco:
void zoom(float delta, float mouse_x, float mouse_y)
{
zoom += delta;
view.w = window.w/zoom;
view.h = window.h/zoom;
// view.x = ???
// view.y = ???
}
zanim ktoś sugeruje to, następujące nie praca:
view.x = mouse_x - view.w/2;
view.y = mouse_y - view.h/2;
Ten obraz pokazuje, dlaczego, jak staram się przybliżyć ku buźkę:
Jak widać, gdy obiekt pod mysz umieszcza się w t on pośrodku ekranu przestaje być pod myszą, więc przestajemy przybliżać się do niego!
Jeśli masz głowę do matematyki (potrzebujesz jej), wszelka pomoc na ten temat będzie najbardziej doceniona!
Czy możesz wyjaśnić, co oznaczają zmienne? – WebF0x