Я написал home-brew view_класс порта для 2D-стратегической игры. Панорамирование (с помощью клавиш со стрелками )и масштабирование (с помощью колесика мыши )работают нормально, но я бы хотел, чтобы вид также возвращался домой туда, где находится курсор, как в Google Maps или Supreme Commander
Я избавлю вас от подробностей того, как реализован зум и даже какой язык я использую:это все не имеет значения. Что важно, так это функция масштабирования, которая изменяет структуру прямоугольника (x,y,w,h), которая представляет представление. Пока что код выглядит так:
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 = ???
}
Пока кто-нибудь не предложит, следующее не будет работать:
view.x = mouse_x - view.w/2;
view.y = mouse_y - view.h/2;
Эта картинка иллюстрирует почему, когда я пытаюсь приблизиться к смайлику:
Как вы можете видеть когда объект под мышью помещается в центр экрана, он перестает быть под мышью, поэтому мы перестаем приближаться к нему!
Если у вас есть способности к математике, (вам она понадобится), мы будем очень признательны за любую помощь в этом!