2012-12-28 55 views
0

这个旧代码在XNA 4.0中不起作用。必须改变什么才能让代码在XNA 4.0中起作用?如何将旧的XNA代码转换为XNA 4.0代码?

spriteBatch.Begin(SpriteBlendMode.AlphaBlend,SpriteSortMode.Immediate,SaveStateMode.None,Matrix.Identity); 
    graphics.GraphicsDevice.SamplerStates[0].MagFilter = TextureFilter.Point; 
    graphics.GraphicsDevice.SamplerStates[0].MinFilter = TextureFilter.Point; 
    graphics.GraphicsDevice.SamplerStates[0].MipFilter = TextureFilter.Point; 
spriteBatch.End(); 

我收到以下错误信息:

'SpriteBlendMode' 并不在当前的背景下
'SaveStateMode' 并不在当前的背景下 “Microsoft.Xna.Framework存在存在。 Graphics.SamplerState'不包含'MagFilter'的 定义,并且没有扩展方法'MagFilter' 接受类型为 的第一个参数'Microsoft.Xna.Framework.Graphics.SamplerState'(可能是 )缺少使用指令或程序集引用?) 'Microsoft.Xna.Framework.Graphics.SamplerState'不包含'MinFilter'的 定义,并且不包含接受 类型的第一个参数'Microsoft'的扩展方法'MinFilter' 。 Xna.Framework.Graphics.SamplerState'可能被找到( 您缺少使用指令或程序集引用?) 'Microsoft.Xna.Framework.Graphics.SamplerState'不包含'MipFilter'的 定义并且没有扩展名方法'MipFilter' 接受类型为 的第一个参数'Microsoft.Xna.Framework.Graphics.SamplerState'(可能是 您缺少使用指令或程序集引用?)

+6

“不起作用”并没有真正的帮助。它是否编译?它是否给出错误信息,如果是的话?它运行没有错误,并意外响应? –

+1

我添加了错误消息。 – Andy

回答

4

这里是一个资源,它会告诉你如何解决这些问题:

http://www.nelxon.com/blog/xna-3-1-to-xna-4-0-cheatsheet/

这些都与改造老XNA代码4.0

+0

我试图更改代码,但我不知道如何更改MagFilter,MinFilter和Mipfilter。这三条线应该改变什么? – Andy

+0

不幸的是,这个例子是在这个特定问题的背景下给出的 - 大概在绘图代码中,这似乎是SamplerStates [0]为空或只读的情况。 – TGP1994

0
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null, Matrix); 
spriteBatch.End(); 

在所有非常常见的问题XNA 4.0如果没有重新插入图形设备 ,则无法更改采样器状态,所以在您的游戏Initialize()方法中,您需要添加graphics.GraphicsDevice.SamplerStates[0].Filter = TextureFilter.Point;

据我所知,这应该是你正在寻找的!

+0

它不起作用。我得到这个错误信息,我不知道如何解决它:无法更改只读SamplerState。状态对象在第一次绑定到GraphicsDevice时变为只读状态。要更改属性值,请创建一个新的SamplerState实例。 – Andy

+0

在XNA 4.0中,您无法更改采样器状态,因此无法重新启动图形设备,因此请在初始化方法中添加“graphics.graphicsDevice.samplerstates [0] ...”部分 – Cyral

1

有你要寻找出与4.0版本的XNA框架使你的代码是最新的几件事情:

此外,还有一件事(这抓住了我,因为我W¯¯作为更新我的代码):似乎在XNA框架的3.1和4.0版本之间发生了一些变化,这将使得SamplerStates集合和SamplerState对象在图形设备初始化后变为只读。我发现创建我自己的SamplerState对象(并在那里修改属性)工作:

SamplerState sState = new SamplerState(); 
sState.Filter = TextureFilter.Point; 
BaseGame.Device.SamplerStates[0] = sState;