紹介として、私は個人的な学習目的で基本的な Quadtree エンジンを作成しています。このエンジンには、さまざまな種類の形状 (現在は円と四角形を使用しています) を処理する機能を持たせたいと考えています。これらの形状はすべてウィンドウ内を移動し、衝突が発生したときに何らかのアクションを実行します。
以前にジェネリック リストのトピックについて質問した後、ポリモーフィズムにインターフェイスを使用することにしました。これに最適なインターフェイスVector2
は、クアッドツリーに表示されるすべてのオブジェクトが x、y 位置を持ち、Vector2
それをうまくカバーするという事実のために利用するインターフェイスです。現在の私のコードは次のとおりです。
public interface ISpatialNode {
Vector2 position { get; set; }
}
public class QShape {
public string colour { get; set; }
}
public class QCircle : QShape, ISpatialNode {
public int radius;
public Vector2 position {
get { return position; }
set { position = value; }
}
public QCircle(int theRadius, float theX, float theY, string theColour) {
this.radius = theRadius;
this.position = new Vector2(theX, theY);
this.colour = theColour;
}
}
public class QSquare : QShape, ISpatialNode {
public int sideLength;
public Vector2 position {
get { return position; }
set { position = value; }
}
public QSquare(int theSideLength, float theX, float theY, string theColour) {
this.sideLength = theSideLength;
this.position = new Vector2(theX, theY);
this.colour = theColour;
}
}
したがって、最終的には、汎用リストを使用できるようになり、コードまたはその行に沿って何かList<ISpatialNode> QObjectList = new List<ISpatialNode>();
を使用して形状を追加できるように機能するインターフェイスが必要になります (私がしたいことを覚えておいてください)線に沿って後で別の形状を追加します)。QObjectList.Add(new QCircle(50, 400, 300, "Red"));
QObjectList.Add(new QSquare(100, 400, 300, "Blue"));
問題は、ここから呼び出すと、このコードが機能しないように見えることです (Initialize()
は XNA メソッドです)。
protected override void Initialize() {
QObjectList.Add(new QCircle(5, 10, 10, "Red"));
base.Initialize();
}
だから私の質問には2つの部分があります:
1.このコードを実行すると、my クラスとクラスのset {
position = value; }
一部でスタック オーバーフロー エラーが発生するのはなぜですか?QCircle
QSquare
2.これは、ポリモーフィズムのためにインターフェースを利用する効率的/効果的な方法ですか?