2013-04-04 97 views
0

我正在使用this tutorial來學習一點XNA,我不斷遇到問題。我不得不轉換很多代碼,因爲它看起來教程不使用XNA 4.0。XNA 4.0 InvalidOperationException是unhandeled

但讓我們開始追逐!

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

發佈這樣的錯誤時,有助於指出拋出錯誤的確切代碼行! – 2013-04-04 11:31:23

回答

2

這基本上意味着它所說的。

您必須通過調用GraphicsDevice.SetRenderTarget(null)(或將其設置爲不同的渲染目標)來從設備中取消設置渲染目標。因爲不能同時用它作爲源紋理和目標緩衝區。

請記住,在這個版本的XNA中,沒有ResolveRenderTarget。渲染目標只需就是紋理。


請注意,您正在使用的教程是非常可怕的。從這樣的渲染目標回讀非常緩慢。特別是可以很容易地在CPU上有效地完成它正在使用渲染目標(在變換區域中選擇像素)的操作。考慮使用this better, official example

+0

啊,非常感謝! 這給了我更多的見解! :) – 2013-04-04 15:41:19