2011-07-22 6 views
1

私はいくつかの三角形をいじっていて、これを作っていました。最初は、私が書いたすべての「メソッド」がインスタンス化されていたが、それらの「メソッド」は:デバイス、コンテンツ、および効果;実際はすべてヌルです。コードは大丈夫ですが、私はそれらの代わりに何を書きますか?まあXNAのnullreferenceexception、フレームワーククラス

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Content; 
using Microsoft.Xna.Framework.Graphics; 

namespace Learning_Test1 
{ 
class Triangle 
{ 
    GraphicsDevice device; 
    ContentManager content; 
    Effect effect; 

    VertexPositionColor[] vertices; 

    public void bob() 
    { 
     content.RootDirectory = "Content"; 
     content.Load<Effect>("effects"); 
    } 

    public void Initialize() 
    { 
     vertices = new VertexPositionColor[3]; 

     vertices[0].Position = new Vector3(1, 0, 0); 
     vertices[0].Color = Color.Red; 

     vertices[1].Position = new Vector3(0, 0, 1); 
     vertices[1].Color = Color.Green; 

     vertices[1].Position = new Vector3(-1, 0, 0); 
     vertices[1].Color = Color.Blue; 
    } 

    public void Update() 
    { 
    } 

    public void Draw() 
    { 
     effect.CurrentTechnique = effect.Techniques["PretransformedPS"]; 

     foreach (EffectPass pass in effect.CurrentTechnique.Passes) 
     { 
      pass.Apply(); 
     } 

     device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 1, VertexPositionColor.VertexDeclaration); 
    } 
} 

}

答えて

0

あなたが実際に初期化されている唯一のことは、あなたの「頂点」配列です。私はあなたが実際に他の変数を初期化しようとするとどこがあなたの質問にいくつかのコードが含まれdidntのない限り、あなたが実際にあなたの

Triangle testTriangle = new Triangle(); 

を呼び出すところあなたのクラス変数、デバイス、コンテンツの残りの部分を初期化する必要があります例えば、参照いけません他の場所に設定する予定がない限り、クラスの初期化関数に反映されます。私が最後にXNAを使用してからしばらくしていますが、私が正しく覚えていれば、新しいゲームテンプレートを作成するときにデバイスとコンテンツが初期化されるかもしれないので、testTriangle.DeviceとtestTriangle.Contentと同じに設定してください。そうでない場合は、XNAサイトのチュートリアルを見てみることをお勧めします。私は100%確信していますので、そこから初期化する方法を理解することができます。

1

これらの(デバイス、コンテンツおよびエフェクト)は「メソッド」ではなく、フィールド(別名変数またはメンバー)です。それらを使用する前にそれらを割り当てる必要があります。おそらくコンテンツとデバイスはクラスのコンストラクタに割り当てられるべきです。既存のContentManagerインスタンスは、Gameクラスで見つけることができます。エフェクトはコンストラクタに割り当てられるか、ロードされます。

また、2つの頂点にのみ割り当てられます。これは何も描画されません。

1

オブジェクトContent,DeviceまたはEffectをインスタンス化していません。独自のクラスを使用しているように私には、例えば、これらのオブジェクトを取り込み、それにconstructorを追加します。

public void bob() 
{ 
    effect = content.Load<Effect>("effects"); 
} 

triangle(GraphicsDevice _device, ContentManager _content) 
{ 
    device = _device; 
    content = _content; 
    content.RootDirectory = "Content"; 
} 

また、あなたのbob方法では、あなたが次の操作を行う必要があります

関連する問題