当我缩小大纹理时,它不会缩小图像。它只是从右下角开始切断图像并沿对角线方向上移。
这是我绘制精灵的方式:
spriteBatch.Draw(Tiles[0].TileTexture, new Vector2(x * TileWidth, y * TileHeight), Color.White);
这是我用。测试的基本影像。
这就是16,16
的样子
和64,64
答案 0 :(得分:1)
如果使用图像16x16,则单元格大小应为16x16。但是如果你想在单元格16x16中绘制64x64图像,你应该将图像缩小到16x16,但在这种情况下,64x64和16x16源图像之间没有区别。或者将单元格设置为64x64像素。
缩放你可以只使用整数刻度,如2x,3x等。不允许非整数刻度以避免图像失真。
SpriteBatch.Draw有overloads。 要根据需要缩放图像,可以使用目标矩形作为第二个参数的重载1,2或3:
SpriteBatch.Draw(
tileTexture,
new Rectange(x * TileWidth, y * TileHeight, TileWidth, TileHeight),
Color.White);
源图像将被固定为矩形。
或者你可以使用两个最后的重载来缩放图像
SpriteBatch.Draw(
tileTexture,
new Vector2(x * TileWidth * scaleX, y * TileHeight * scaleY),
null,
Color.White,
0,
Vector2.Zero,
new Vector2(scaleX, scaleY),
SpriteEffects.None,
0);
另外,如果你只需要用同一个瓷砖填充背景,你可以用任何包裹SemplerState参数(对我来说更好的PointWrap)调用spritebatch begin methos并像这样绘制一次tile: SpriteBatch.Draw( tileTexture, new Rectange(0,0,GraphicsDevice.Viewport.Width,GraphicsDevice.Viewport.Height), Color.White);