【问题标题】:XNA 4.0 InvalidOperationException was unhandeledXNA 4.0 InvalidOperationException 未处理
【发布时间】:2013-04-04 19:43:48
【问题描述】:

我正在使用this tutorial 学习一点 XNA,但我一直遇到问题。我不得不转换很多代码,因为本教程似乎不使用 XNA 4.0。

但是让我们切入正题!

float aXPosition = (float)(-mCarWidth / 2 + mCarPosition.X + aMove * Math.Cos(mCarRotation));
            float aYPosition = (float)(-mCarHeight / 2 + mCarPosition.Y + aMove * Math.Sin(mCarRotation));
            Texture2D aCollisionCheck = CreateCollisionTexture(aXPosition, aYPosition);

            //Bruke GetData til å fylle en array med fargen på pixlene ved collisons texturen
            int aPixels = mCarWidth * mCarHeight;
            Color[] myColors = new Color[aPixels];
            aCollisionCheck.GetData<Color>(0, new Rectangle((int)(aCollisionCheck.Width / 2 - mCarWidth / 2),
                (int)(aCollisionCheck.Height / 2 - mCarHeight / 2), mCarWidth, mCarHeight), myColors, 0, aPixels);

我尝试调试代码时遇到的错误是:InvalidOperationException 未处理,渲染目标用作纹理时不能在设备上设置。

我不知道该怎么办。

【问题讨论】:

  • 当发布这样的错误时,它有助于指出引发错误的确切代码行!

标签: xna-4.0 invalidoperationexception


【解决方案1】:

这基本上就是它所说的。

您必须通过调用GraphicsDevice.SetRenderTarget(null)(或将其设置为不同的渲染目标)从设备取消设置渲染目标。因为您不能同时将其用作源纹理和目标缓冲区。

请记住,在这个版本的 XNA 中,没有ResolveRenderTarget。渲染目标只是纹理。


请注意,您使用的教程非常糟糕。从像这样的渲染目标中读回非常慢。特别是看到它使用渲染目标的操作(选择变换区域中的像素)可以很容易地在 CPU 上高效地完成。考虑使用this better, official example

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多