我正在使用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,当它用作纹理时,不得在设备上设置渲染目标。
我不知道该怎么做。
答案 0 :(得分:2)
这基本上就意味着它所说的。
您必须通过调用GraphicsDevice.SetRenderTarget(null)
(或将其设置为其他渲染目标)从设备中取消设置渲染目标。因为您不能同时将它用作源纹理和目标缓冲区。
请注意,在此版本的XNA中,没有ResolveRenderTarget
。渲染目标只需是纹理。
请注意,您使用的教程非常糟糕。从像这样的渲染目标读回来是非常慢的。特别是看到它正在使用渲染目标(在变换区域中选择像素)的操作可以很容易地在CPU上有效地完成。考虑使用this better, official example。