2013-04-04 3 views
0

J'utilise this tutorial pour apprendre un peu de XNA, et je continue de rencontrer des problèmes. J'ai dû convertir beaucoup de code, puisqu'il semble que le tutoriel n'utilise pas XNA 4.0.XNA 4.0 InvalidOperationException was unchanded

Mais permet de couper à la chasse!

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); 

L'erreur que je reçois lorsque je tente de déboguer le code dit: InvalidOperationException était unhandeled, La cible doit rendre pas être réglée sur l'appareil lorsqu'il est utilisé comme une texture.

Je n'ai aucune idée quoi faire.

+0

Lors de la publication d'une erreur de ce type, il est utile d'indiquer la ligne de code exacte qui déclenche l'erreur! –

Répondre

2

Cela signifie exactement ce qu'il dit.

Vous devez désactiver la cible de rendu à partir du périphérique en appelant GraphicsDevice.SetRenderTarget(null) (ou en le définissant sur une cible de rendu différente). Parce que vous ne pouvez pas l'utiliser à la fois comme texture source et tampon de destination en même temps.

Gardez à l'esprit que, dans cette version de XNA, il n'y a pas ResolveRenderTarget. Render cibles simplement sont textures.


Notez que le tutoriel que vous utilisez est assez terrible. La lecture d'une cible de rendu comme celle-ci est extrêmement lente. Surtout vu que les opérations pour lesquelles il utilise la cible de rendu (sélection de pixels dans une région transformée) pourraient facilement être effectuées efficacement sur le CPU. Envisagez d'utiliser this better, official example.

+0

Ah, merci beaucoup! Cela m'a donné un peu plus de perspicacité! :) –