我正在将大图像(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);
答案 0 :(得分:1)
我相信正在发生的事情是mapSourceRectangle只使用一个800 x 600的纹理部分作为源,然后使用mapRectangle(目标)将其吹到1500,1000,这应该是屏幕空间中的位置。通过删除sourceRectangle,它使用正确大小的整个图像。
http://msdn.microsoft.com/en-us/library/ff433987.aspx
destinationRectangle:
一个矩形,指定(在屏幕坐标中)绘制精灵的目的地。如果此矩形与源矩形的大小不同,则将缩放精灵以适合。