2015-12-23 1 views
0

В настоящее время все мои текстуры масштабируются и перемещаются в нужное положение, когда область просмотра, в которую я рисую их, меняет размер или положение (мне не нужно делать какие-либо вычисления сами, чтобы сделать это).Как заставить DrawString() учитывать текущий видовой экран при рисовании, например Draw()?

Однако, когда я использую DrawString() (пока все еще находится в том же окне просмотра), а область просмотра меняет размер или позицию, текст не следует никакой логике, которую я могу выяснить. Он масштабируется так, как ожидалось, но движется очень странно.

Вот

a gif showing how it currently works

(чтобы получить имя главного игрока, чтобы правильно двигаться при масштабировании вниз, я пришел с этой плохой "формула":. X - = Viewport.X/2.15f Y - = Viewport.X/3.2f)

Теперь, есть ли способ сделать DrawString() работать как Draw(), когда дело доходит до масштабирования с помощью видовых экранов?

Путь я получил его настроить сейчас:

_spriteBatch.GraphicsDevice.Viewport = ScreenGame.Viewport; 
// Draw tile sprites 
// Draw player sprites 
// Draw text 

Мои извинения заранее, если я забыл упомянуть что-то соответствующее.

+0

Почему имя Эрры не двигается? Разве это не вызов 'DrawString', или предполагается, что вы хотите, чтобы конечный результат был? – AustinWBryan

+0

@ Имя AustinWBryan Erra является основным игроком, я не знаю, почему я написал «основного игрока» вместо «Erra», я думаю, что это усталость. Итак, да, имя Erra - это то, как я хочу, чтобы конечный результат был, но формула, которую я использовал для имени Erra, работает только потому, что она находится в центре области просмотра (опять же, я не узнал, как получить текст для масштабирования без придумал формулу для него, которой я еще не смог) – Erra

ответ

2

На DrawString() попробовать

x /= Scale.X; 
y /= Scale.Y; 

Это, конечно, псевдо-код. Я думаю, что если вы можете найти новый масштаб и сохранить его в struct или что-то в этом роде, вы можете сделать это, чтобы правильно масштабировать местоположение текста.

+0

Спасибо, тонна, я слишком устал, чтобы понять, насколько это просто на самом деле. Я имею в виду, что я уже рассчитал масштаб следующим образом: Vector2 gameScale = new Vector2 ((float) ScreenGame._Viewport.Width/(float) ScreenGame_Width, (float) ScreenGame._Viewport.Height/(float) ScreenGame_Height); и все, что мне нужно было сделать, это X * = Scale.X и Y * = Scale.Y (причина, по которой я делаю умножение вместо деления, я думаю, это потому, что я вычисляю масштаб следующим образом: currentWidth/MaxWidth вместо MaxWidth/currentWidth?) , возможно, неправильный расчет, я глупо устал, но все работает сейчас, поэтому еще раз спасибо! – Erra

+0

Я все еще считаю это странным, хотя Draw() учитывает масштаб при рисовании и масштабировании, тогда как DrawString() требует, чтобы вы вручную указали ему, чтобы умножить позицию на шкалу. Странная реализация. – Erra

+0

Да, но у них всегда есть причина для этих коротких вещей .. и я просто заметил, что ваше имя персонажа - Erra, и это ваше имя учетной записи. Так вы назвали своего персонажа после себя или наоборот? – AustinWBryan

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