精灵变得模糊了。

7
我开始学习C#和XNA,并想要显示一个动画精灵(通过我的键盘移动)。
我有这个精灵文件: basic sprite 为了只显示我需要的部分,我使用以下代码:
Rectangle cuttedSprite = new Rectangle(
    this.W * (int)this.mCurSprite.X, 
    this.H * (int)this.mCurSprite.Y, 
    this.W, 
    this.H
);
spriteBatch.Draw(this.mSpriteTexture, this.mPosition, cuttedSprite, Color.White);

但我的问题是,在移动后呈现的图像模糊了: 模糊问题 我尝试通过更改SamplerStates来解决这个问题,但没有任何改变。有人有想法可以帮助我吗?

3
请尝试使用SamplerState.PointWrap。另外,由于mPosition很可能是一个Vector2,请尝试将mPosition.XmPosition.Y四舍五入到最近的整数。 - Lucius
1
你是对的!我尝试在斜线移动时在非整个像素上显示我的图像...好的,发布这个答案,我会验证它的! - PoulsQ
2个回答

5

将精灵的位置四舍五入到最近的整数。

如果精灵的目标矩形偏移少于一个像素,像素着色器中的采样器将通过在相邻像素之间插值来计算颜色。

另一种选择是更改采样器的过滤方法为最近邻插值。您可以在调用SpriteBatch.Begin时指定SamplerState.PointWrapSamplerState.PointClamp来实现这一点。


1
根据您的处理方式,您可能只想为呈现目的执行四舍五入。例如,如果您正在使用物理引擎,您希望在求解器中保留精确坐标,否则它将不断尝试进行更正,因此仅对实际绘制调用进行舍入。 - ssube

0
当移动按钮释放时,最简单的方法是将Position.X和Position.Y转换为(int)类型。

这个问题已经在近一年前得到了回答,除非有新的内容需要添加,否则不需要再次提及。 - Leeor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接