0

我正在将大图像(1500x1000)加载到纹理中。我的 graphics.PreferredBackBufferWidth/Height 是 800x600。我将 drawRectangle 设置为与大图像相同的大小。

当鼠标移向屏幕边缘时,我通过让 sourceRectangle 更改其 x 和 y 坐标来滚动地图。这一切似乎都很好,但我的照片被扭曲了。如果我删除了 sourceRectangle 并且只使用了正常的 drawRectangle 那么它不会失真,我是否缺少一些东西?

    SpriteBatch spriteBatch;
    Texture2D pic;
    Rectangle mapRectangle;
    Rectangle mapSourceRectangle;


    public Game1()
        : base()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";

        graphics.PreferredBackBufferWidth = 800;
        graphics.PreferredBackBufferHeight = 600;
        IsMouseVisible = true;
    }

...

pic = Content.Load<Texture2D>("map");
        mapRectangle = new Rectangle(0, 0, pic.Width, pic.Height);
        mapSourceRectangle = new Rectangle(0, 0, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);

最后当我画它的时候。

spriteBatch.Draw(pic, mapRectangle, mapSourceRectangle, Color.White);
4

1 回答 1

1

我相信正在发生的事情是 mapSourceRectangle 仅采购纹理的 800 x 600 部分用作源,然后使用 mapRectangle (目标)将其放大到 1500,1000,这应该是屏幕空间中的位置。通过删除 sourceRectangle 它以正确的大小使用整个图像。

http://msdn.microsoft.com/en-us/library/ff433987.aspx

目的地矩形:

一个矩形,它指定(在屏幕坐标中)绘制精灵的目的地。如果此矩形与源矩形的大小不同,则精灵将被缩放以适应。

于 2013-10-21T04:51:02.617 回答