【问题标题】:How to translate this old XNA code to XNA 4.0 code?如何将这个旧的 XNA 代码翻译成 XNA 4.0 代码?
【发布时间】:2014-12-07 21:47:17
【问题描述】:

这个旧代码在 XNA 4.0 中不起作用。必须进行哪些更改才能使代码在 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”(是 您缺少 using 指令或程序集引用?) 'Microsoft.Xna.Framework.Graphics.SamplerState' 不包含 'MinFilter' 的定义并且没有扩展方法 'MinFilter' 接受类型的第一个参数 可以找到“Microsoft.Xna.Framework.Graphics.SamplerState”(是 您缺少 using 指令或程序集引用?) 'Microsoft.Xna.Framework.Graphics.SamplerState' 不包含 'MipFilter' 的定义并且没有扩展方法 'MipFilter' 接受类型的第一个参数 可以找到“Microsoft.Xna.Framework.Graphics.SamplerState”(是 您缺少 using 指令或程序集引用?)

【问题讨论】:

  • “不起作用”并没有真正的帮助。它编译吗?它是否提供错误消息,如果是,那又是什么?它是否运行无错误并意外响应?
  • 我添加了错误信息。

标签: c# xna xna-4.0 xna-3.0


【解决方案1】:

以下资源将向您展示如何解决这些问题:

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

这些都是与将旧 XNA 代码升级到 4.0 相关的非常常见的问题

【讨论】:

  • 我尝试更改代码,但不知道如何更改 MagFilter、MinFilter 和 Mipfilter。我应该在这 3 行中更改什么?
  • 遗憾的是,该示例在此特定问题的上下文中给出 - 大概是在绘图代码中,这似乎是 SamplerStates[0] 为空或只读时。
【解决方案2】:

在使用 4.0 版本的 XNA Framework 更新代码时,您需要注意以下几点:

另外,还有一件事(在我更新代码时引起了我的注意):似乎在 XNA 框架的 3.1 和 4.0 版本之间发生了一些变化,这将使 SamplerStates 集合和 SamplerState 对象被读取-只有在图形设备初始化之后。我发现创建自己的 SamplerState 对象(并修改那里的属性)是可行的:

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

【讨论】:

    【解决方案3】:
    spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null, Matrix);
    spriteBatch.End();
    

    在 XNA 4.0 中,如果不重新启动图形设备,您将无法更改采样器状态, 所以在你的游戏 Initialize() 方法中,你需要添加graphics.GraphicsDevice.SamplerStates[0].Filter = TextureFilter.Point;

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

    【讨论】:

    • 它不起作用。我收到此错误消息,但不知道如何解决:无法更改只读 SamplerState。状态对象在第一次绑定到 GraphicsDevice 时变为只读。要更改属性值,请创建一个新的 SamplerState 实例。
    • 在 XNA 4.0 中,如果不重新启动图形设备,则无法更改采样器状态,因此,在初始化方法中添加“graphics.graphicsDevice.samplerstates[0]...”部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多