XNA 4.0 InvalidOperationException未处理

时间:2013-04-04 10:28:13

标签: xna-4.0 invalidoperationexception

我正在使用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是unhandeled,当它用作纹理时,不得在设备上设置渲染目标。

我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

这基本上就意味着它所说的。

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

请注意,在此版本的XNA中,没有ResolveRenderTarget。渲染目标只需纹理。


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