【问题标题】:Scale texture to fit a circular body缩放纹理以适应圆形主体
【发布时间】:2015-04-20 05:03:57
【问题描述】:

我的 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);

问题是我的纹理是120px120px,但是当它在屏幕上渲染时,_ball 主体的大小比它大。我可以做些什么来调整纹理的大小以完全适合 _ball 主体的宽度和高度?

【问题讨论】:

    标签: c# textures monogame farseer


    【解决方案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(圆的总宽度)转换为似乎矩形纹理已经存在的显示单位。然后当我去绘制身体时,我只需要使用这个_ballTextureScale属性:

    ScreenManager.SpriteBatch.Draw(_ballSprite.Texture, ConvertUnits.ToDisplayUnits(_ball.Position), null, Color.White, _ball.Rotation, _ballSprite.Origin, _ballTextureScale, SpriteEffects.None, 0f);
    

    如果这是一个不正确的方法,我很乐意用更好的方法来完成这项任务,但它似乎非常适合我的需求。

    【讨论】:

      猜你喜欢
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 2010-10-26
      • 1970-01-01
      • 2012-01-28
      相关资源
      最近更新 更多