通過介紹,我爲個人學習目的創建了一個基本的Quadtree引擎。我希望這個引擎能夠處理許多不同類型的形狀(當前我正在用圓形和正方形),這些形狀都會在窗口中移動,並在碰撞發生時執行某種動作。在C#中使用多態的接口#
之前詢問了關於泛型列表主題的問題之後,我決定使用多態的接口。最好的界面是使用Vector2
的界面,因爲我的四叉樹中出現的每個對象都會有一個x,y的位置並很好地覆蓋。這裏是我的代碼,因爲它目前爲:
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();
}
所以我的問題有兩部分:
1.爲什麼這段代碼在我的QCircle
和QSquare
類的set { position = value; }
部分給我一個計算錯誤?
2.這是一種利用多態性接口的高效/有效方式嗎?
你又來了! Hehe = p – Pete 2012-07-06 04:53:53
我可以說什麼,我似乎無法離開:P – Djentleman 2012-07-06 10:44:54