SourceRectangle似乎扭曲了图像

时间:2013-10-21 04:09:48

标签: c# xna

我正在将大图像(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);

1 个答案:

答案 0 :(得分:1)

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

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

destinationRectangle:

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