如何缩小我的大纹理以使其保持居中?

时间:2015-02-22 05:49:24

标签: c# xna texture2d

当我缩小大纹理时,它不会缩小图像。它只是从右下角开始切断图像并沿对角线方向上移。

这是我绘制精灵的方式:

spriteBatch.Draw(Tiles[0].TileTexture, new Vector2(x * TileWidth, y * TileHeight), Color.White);

这是我用。测试的基本影像。

enter image description here

这就是16,16

的样子

enter image description here

和64,64

enter image description here

1 个答案:

答案 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);