回答你的問題的困難之處在於你問的這兩個:「我現在應該做的,對傍」和「我該怎麼辦後,一些通用的遊戲」。
爲了傍你甚至不需要球和槳類,因爲他們基本上只是位置。只要堅持這樣的事情在你的遊戲類:
Vector2 ballPosition, ballVelocity;
float leftPaddlePosition, rightPaddlePosition;
然後,只需更新和一切爲了適合在你的遊戲的Update
和Draw
功能吸引他們你。簡單!
但是,假設你想創建多個球和球的許多性質(位置,速度,旋轉,顏色等):你可能想使一個Ball
類或結構,你可以實例(同去槳)。你甚至可以將一些功能移到那些自成一體的類中(Draw
函數就是一個很好的例子)。
但保持設計概念相同 - 所有對象到對象的交互處理(即:遊戲玩法)都發生在您的Game
類中。
這一切就好了,如果你有兩個或三個不同的遊戲元素(或類)。
然而,讓我們假定一個更加複雜的遊戲。讓我們參加基本的乒乓球比賽,添加一些彈球元素,如多球和玩家控制的腳蹼。讓我們添加一些來自Snake的元素,比如我們有一個AI控制的「蛇」以及一些拾取物體,這些物體可以是球或者蛇。並且,爲了讓我們說得更好,我們可以說划槳也可以像太空侵略者那樣拍攝激光,而激光栓根據拍攝的內容做不同的事情。
天哪這是一個相互作用的巨大的混亂!我們將如何應對?我們不能把它放在遊戲中!
簡單!我們製作一個界面(或一個抽象類或一個虛擬類),以便我們的遊戲世界中的每個「事物」(或「演員」)將從中派生出來。下面是一個例子:。
interface IActor
{
void LoadContent(ContentManager content);
void UnloadContent();
void Think(float seconds);
void UpdatePhysics(float seconds);
void Draw(SpriteBatch spriteBatch);
void Touched(IActor by);
Vector2 Position { get; }
Rectangle BoundingBox { get; }
}
(這僅僅是一個例子沒有「一個真正的演員接口」,會爲每場比賽的工作,你需要設計自己這就是爲什麼我不不喜歡DrawableGameComponent
。)
擁有一個通用的接口允許遊戲只是談論演員 - 而不需要知道你的遊戲中的每一種類型。這是剛出來做共同的所有類型的東西 - 碰撞檢測,繪製,更新,加載,卸載等
一旦你在演員,你就可以開始擔心特定類型的演員。例如,這可能是Paddle
的方法:
void Touched(IActor by)
{
if(by is Ball)
((Ball)by).BounceOff(this.BoundingBox);
if(by is Snake)
((Snake)by).Kill();
}
現在,我喜歡讓由槳反彈球,但它確實是一個口味問題。你可以反過來做。
你到底應該能夠堅持在一個大名單,你可以簡單地通過遊戲遍歷所有的演員。
在實踐中,你可能最終具有不同類型的性能或代碼簡單起見演員的多個列表。這是可以的 - 但總的來說,試圖堅持遊戲的原則只知道通用演員。
演員可能還需要查詢各種原因存在哪些其他演員。因此,請給每個演員參考遊戲,並在遊戲中製作演員名單(當您編寫遊戲性代碼時,您不需要對公共/私人進行超級嚴格限制,並且這是您自己的內部代碼。)
現在
,你甚至可以更進一步,並有多個接口。例如:一個用於渲染,一個用於腳本和AI,一個用於物理等等。然後可以將多個實現組合到對象中。
這在this article中詳細描述。我在this answer有一個簡單的例子。如果你開始發現你的單個actor角色開始變成更多抽象類的「樹」,這是一個合適的下一步。
我認爲你說「邏輯」的地方你實際上是指「架構」。 – 2011-03-28 14:01:10
(我一直在參考這個問題,所以我會自己修復這個標題......) – 2011-08-15 14:36:47
這更適合http://gamedev.stackexchange.com/ – AlexFoxGill 2013-03-18 17:18:09