Приблизьтесь к мыши (, например. Карты Google)

Я написал 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;

Эта картинка иллюстрирует почему, когда я пытаюсь приблизиться к смайлику:

http://oi43.tinypic.com/16m21au.jpg

Как вы можете видеть когда объект под мышью помещается в центр экрана, он перестает быть под мышью, поэтому мы перестаем приближаться к нему!

Если у вас есть способности к математике, (вам она понадобится), мы будем очень признательны за любую помощь в этом!

10
задан wilbefast 6 March 2012 в 21:21
поделиться