XNA - 绘制缩放的2D精灵

时间:2012-05-12 18:15:18

标签: xna zoom textures

我有一个基于磁贴的游戏。加载每个平铺纹理,然后我将每个平铺纹理绘制在另一个平铺纹理旁边,形成连续的背景。我实际上遵循了本教程中的xml文件。

http://www.xnadevelopment.com/tutorials/looksleveltome/looksleveltome.shtml

纹理的来源是50x50。

但是,如果比例大于

,它只适用于比例为1(或更低)

结果:正常尺寸(50像素和比例1) http://imageshack.us/photo/my-images/525/smallzp.jpg/

更大尺寸(缩放或xml文件中的100像素) http://imageshack.us/photo/my-images/577/largeki.jpg/

我们可以看到瓷砖之间有线条,这些线条不在纹理中。它实际上并没有那么糟糕,但在我的游戏拼贴中,它的作用是: http://imageshack.us/photo/my-images/687/zoomedsize.png/

无论我是否增加xml文件中的图块大小,在绘图时更改比例或使用我的相机进行缩放,都会产生相同的效果。

//zoom code
public Matrix GetTransformation()
{
    return
       Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) *
       Matrix.CreateRotationZ(Rotation) *
       Matrix.CreateScale(new Vector3(Zoom, Zoom, 1)) *
       Matrix.CreateTranslation(new Vector3(_device.Viewport.Width * 0.5f, _device.Viewport.Height * 0.5f, 0));
}

//draw
_spriteBatch.Begin(SpriteSortMode.Immediate, 
  BlendState.AlphaBlend, null, null, null, null,
  _camera.GetTransformation());

//for each tile
theSpriteBatch.Draw(mSpriteTexture, Position, Source, 
  Color.Lerp(Color.White, Color.Transparent, mAlphaValue),
  mRotation, new Vector2(mSource.Width / 2, mSource.Height / 2),
  Scale, SpriteEffects.None, mDepth);

这有什么理由吗?一种修复它的方法,以便在缩放时具有连续纹理?

1 个答案:

答案 0 :(得分:1)

问题出在你的采样器状态,gpu试图在点附近采样颜色以插入它们。

在spriteBatch.Begin()中使用SamplerState.PointClamp,它将被修复。