2015-07-09 2 views
1

У меня есть куча объектов со следующими свойствами:Как включить масштабирование в эту систему координат?

xPos = x coordinate of position in world 
yPos = y coordinate of position in world 
size = size of object 

У меня есть функция, которая втягивает эти объекты на экране. Экран имеет смещение x и y, поэтому пользователь может панорамировать, и объекты будут перемещаться по экрану и при необходимости. Все это прекрасно работает. Теперь я хотел бы добавить возможность увеличения и уменьшения масштаба, но я не могу понять, как применить масштаб к позициям.

render(int xOff, int yOff, int zoom){ 
    int x = xPos + xOff; 
    int y = yPos + yOff; 
    s->addRenderJob(texID, x, y, size * zoom, size * zoom); 
} 

Увеличение размера объекта является простым, но как я могу изменить й и у позиции, масштаб, так что расстояние между объектами также умножаются на зуме?

+0

Вы можете вычислить дельта масштабирования, а затем умножить координаты на коэффициент масштабирования. Я думаю, что было бы проще, если бы вы работали с разрешением или движком чертежа, а не с фактическими координатами. MVC или что-то еще. – VermillionAzure

+0

Можете ли вы объяснить, что вы подразумеваете под дельтами увеличения? Если масштабирование изначально 1, и я делаю это 2, масштаб дельты будет 1? Я не понимаю. – JakeP

+0

Обычно, когда вы получаете пользовательские входы, есть определенное количество «вращения», заданное колесом мыши или другим входом. Когда это происходит, лучшим может быть умножение координат с помощью «коэффициента масштабирования» или отношения пользовательского ввода к желаемому эффекту, который вы хотели бы достичь. Дельта может быть изменением, если ваш вход измеряется как «скаляр» или просто абсолютное количество. – VermillionAzure

ответ

0

render(int xOff, int yOff, int zoom){ int x = xPos + xOff; int y = yPos + yOff; s->addRenderJob(texID, x* zoom, y* zoom, size * zoom, size * zoom); }

при необходимости, вы можете скачать движок игры. изучить, как бороться с системой координат в игре.

+0

Это неправильно. Это было первое, что я пробовал, но это не сработало. Теперь я работаю, обнаруживая разницу между x и центром экрана и умножая это на масштаб. – JakeP

0
halfX = SCREEN_WIDTH/2 
halfY = SCREEN_HEIGHT/2 
deltaX = xPos - halfX; 
deltaY = yPos - halfY; 
x = halfX + deltaX * zoom + xOff; 
y = halfY + deltaY * zoom + yOff; 

Благодаря VermillionAzure за помощь в этом.

Смежные вопросы