c# - 在 xna 中使用 Rasterizer Scissoring 时出错

标签 c# xna

我正在尝试使用 Scissoring 来剪辑使用 spriteBatch.DrawString 方法绘制的文本。

以下是我的 Draw 方法的一部分:

    public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
    {

    ...

        spriteBatch.GraphicsDevice.RasterizerState = new RasterizerState();
        spriteBatch.GraphicsDevice.RasterizerState.ScissorTestEnable = true;

        Rectangle rectangle = new Rectangle();
        rectangle.Height = 50;
        rectangle.Width = 1;  //set to 1 just so I'll immediately know if it's working

        spriteBatch.GraphicsDevice.ScissorRectangle = rectangle;

        for (int i = 0; i < career.news.Count; i++)
        {
            Vector2 newsItems = new Vector2(200 + i * 80, 550);
            spriteBatch.DrawString(DefaultText, career.news[i], newsItems, Color.Black);
        }

        spriteBatch.GraphicsDevice.RasterizerState.ScissorTestEnable = false;

  ...

  }

我收到以下错误:

“无法更改只读的 RasterizerState。State 对象在第一次绑定(bind)到 GraphicsDevice 时变为只读。要更改属性值,请创建一个新的 RasterizerState 实例。”

我不太明白,因为我在上面的代码中创建了一个新实例。我错过了什么?

编辑:修改后的代码 - 错误已删除但剪裁仍然无法正常工作:

        Rectangle rectangle = new Rectangle();
        rectangle.Height = 50;
        rectangle.Width = 1;

        RasterizerState rasterizerState = new RasterizerState();
        rasterizerState.ScissorTestEnable = true;
        spriteBatch.GraphicsDevice.RasterizerState = rasterizerState;

        spriteBatch.GraphicsDevice.ScissorRectangle = rectangle;

        for (int i = 0; i < career.news.Count; i++)
        {
            Vector2 newsItems = new Vector2(200 + i * 80, 550);
            spriteBatch.DrawString(DefaultText, career.news[i], newsItems, Color.Black);
        }

        RasterizerState rasterizerState2 = new RasterizerState();
        rasterizerState2.ScissorTestEnable = false;
        spriteBatch.GraphicsDevice.RasterizerState = rasterizerState2;

最佳答案

这意味着您不能修改 spriteBatch.GraphicsDevice.RasterizerState 属性。您需要做的是创建一个实例,设置其属性,然后将其传递给 spriteBatch.GraphicsDevice.RasterizerState

RasterizerState r = new RasterizerState();
r.ScissorTestEnable  = true;
spriteBatch.GraphicsDevice.RasterizerState = r;
....
RasterizerState r1 = new RasterizerState();
r1.ScissorTestEnable = false;
spriteBatch.GraphicsDevice.RasterizerState = r1;

关于c# - 在 xna 中使用 Rasterizer Scissoring 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22311420/

相关文章:

c# - 快速比较两个巨大文本文件的内容

java - 使用 Simple 设置 XML 反序列化类(XNA 到 Java 移植)

audio - XNA无法创建AudioEngine

c# - 如何以流的形式打开项目中的文件?

c# - 使用 Visual Studio 形式将信息输入数据库

c# - 更改在 C# 中创建的 Excel 图表上的轴标签

c# - 如何解析 C# 的命令行输出?

c# - 如何检测应用程序运行在WE8H 还是普通的Windows Phone 8 上?

c# - 如何在 XNA 中播放动态声音?

c# - 选择多维数组中的所有相邻值