C# 如何使DrawString()在绘制时像Draw()那样考虑当前视口?

C# 如何使DrawString()在绘制时像Draw()那样考虑当前视口?,c#,xna,viewport,monogame,drawstring,C#,Xna,Viewport,Monogame,Drawstring,当前,当我绘制纹理的视口改变大小或位置时,所有纹理都会被缩放并移动到正确的位置(我自己不必做任何计算) 但是,当我使用DrawString()(仍在同一视口中)并且视口更改了大小或位置时,文本没有遵循我可以理解的逻辑。它的伸缩性和预期的一样,但它的移动方式非常怪异 这是 (为了让主要玩家的名字在缩小比例时正确移动,我想出了一个糟糕的“公式”:X-=Viewport.X/2.15f.Y-=Viewport.X/3.2f) 现在,在使用视口进行缩放时,有没有办法使DrawString()像Draw

当前,当我绘制纹理的视口改变大小或位置时,所有纹理都会被缩放并移动到正确的位置(我自己不必做任何计算)

但是,当我使用DrawString()(仍在同一视口中)并且视口更改了大小或位置时,文本没有遵循我可以理解的逻辑。它的伸缩性和预期的一样,但它的移动方式非常怪异

这是

(为了让主要玩家的名字在缩小比例时正确移动,我想出了一个糟糕的“公式”: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
如果我忘记提及相关内容,我将提前向您道歉。

请在
抽绳()上尝试

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

这当然是伪代码。我认为,如果你能找到新的比例并将其存储在
结构中,你可以这样做来正确地缩放文本的位置。

为什么Erra的名字不移动?是不是在调用
DrawString
,还是你希望最终输出是这样的?@AustinWBryan Erra的名字是主角,我不知道为什么我写的是“主角”而不是“Erra”,我想这是一件很累的事。是的,Erra的名字是我想要最终输出的样子,但是我为Erra的名字使用的公式只起作用,因为它位于视口的中心(同样,我还没有找到如何让文本缩放而不为它想出一个公式,我还没有找到),多谢了,我太累了,没有意识到这有多容易。。我的意思是,我已经这样计算了比例:Vector2 gameScale=新Vector2((浮动)屏幕游戏。_Viewport.Width/(浮动)屏幕游戏_Width,(浮动)屏幕游戏。_Viewport.Height/(浮动)屏幕游戏_Height);我所要做的就是X*=Scale.X和Y*=Scale.Y(我想我之所以做乘法而不是除法,是因为我是这样计算比例的:currentWidth/MaxWidth而不是MaxWidth/currentWidth?),计算可能是错误的,我很累,但现在一切都正常了,再次感谢!尽管Draw()在绘制和缩放时考虑了比例,但我仍然觉得很奇怪,而DrawString()需要您手动告诉它将位置与比例相乘。奇怪的实现。是的,但他们总是有理由做这些事情。。我刚刚注意到你的角色名是Erra,这是你的帐户名。那么,你是用你自己的名字来命名你的角色还是用你自己的名字来命名你的角色呢?Erra只是我在网上使用的一个昵称:)而且,超级尴尬。。我完全错了,Draw()和DrawString()在缩放方面的作用是一样的。。这是我用来绘制精灵的函数(我完全忘了我已经为它编写了一个自定义函数):private void DrawScaledSprite(Texture2D Sprite,Vector2 Position,Vector2 Scale){u spriteBatch.Draw(Sprite,new Vector2(Scale.X*Position.X,Scale.Y*Position.Y),null,Color.White,0f,Vector2.Zero,Scale,SpriteEffects.None,0f)}哈哈,好吧(:而且,嘿,至少这表明你把程序抽象部分做对了!