我在MonoGame / Farseer Physics项目中有以下代码:
_ball = BodyFactory.CreateCircle(World, 1f, 400f);
_ball.BodyType = BodyType.Dynamic;
_ballSprite = new Sprite(ScreenManager.Content.Load<Texture2D>("Common/ball"));
在我的Draw方法中:
ScreenManager.SpriteBatch.Draw(_ballSprite.Texture, ConvertUnits.ToDisplayUnits(_ball.Position), null, Color.White, _ball.Rotation, _ballSprite.Origin, 1f, SpriteEffects.None, 0f);
问题是我的纹理是120px
120px
,但是当它在屏幕上呈现时,_ball
正文大于它的大小。我该怎么做才能调整纹理大小以适应_ball
身体的宽度和高度?
答案 0 :(得分:1)
我想我终于解开了这个谜团。我需要计算比例(_ballTextureScale
,这是我坚持的部分):
var radius = 1f;
_ball = BodyFactory.CreateCircle(World, radius, 400f);
_ball.BodyType = BodyType.Dynamic;
var rectangleTexture = ScreenManager.Content.Load<Texture2D>("Common/ball");
_ballTextureScale = ConvertUnits.ToDisplayUnits(radius * 2) / rectangleTexture.Width;
这会将radius * 2
(圆的总宽度)转换为矩形纹理所在的显示单位。然后,当我去绘制正文时,我只需要使用此{{ 1}} property:
_ballTextureScale
如果这是一种不正确的方法,我会听到更好的方法来完成这项任务,但它似乎能很好地满足我的需求。