0

我正在使用本教程来学习一点 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 未处理,当它用作纹理时,不得在设备上设置渲染目标。

我不知道该怎么做。

4

1 回答 1

2

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

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

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


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

于 2013-04-04T11:43:48.527 回答