2013-04-02 31 views
1

這個問題涉及到XNA 4.0遊戲,所以很自然地就會有一個簡單的遊戲執行循環:使用委託作爲方法執行隊列?

Init() 
Load() 
Update() 
Draw() 

我希望能夠讓這個循環儘可能乾淨,我已經在我的腦海中進行規劃,我想在實際整合之前寫下我想要做的事情。委託如何實用作爲一種方法隊列?

Init() 
    initQueue(RequiredArgs) 
Load() 
    loadQueue(RequiredArgs) 

我想補充的方法來爲需要的隊列,可能使多個代表,所以我沒有100個ARGS添加到我的代表和執行多個方法一起共享類似的論據。

回答

2

從我的理解,你有幾個選擇。

首先,製作一個List<Action>或其他保存代表的其他列表。這樣你就可以通過代表來通過你的方式。

至於參數,則可以:

一個)有它採取ListArray,或params作爲輸入(這些將是類型的對象)。這允許每週定義的無限值輸入。你的功能只需要知道哪個是哪個,並希望上帝插入正確的。我不會推薦這個,除非你不能這麼做......

b)爲所有委託函數調用構造一個基本抽象類,作爲Base Settings。然後爲需要特定事物的每個委託製作專門的繼承類。這可能會耗費更多時間,但從長遠來看(爲了維護和可讀性)將是值得的。

3

代表的集合(通常是隊列)的一般想法沒有任何問題。這是一個合理的消息循環實現。

值得注意的是,如果可以將消息從多個線程添加到隊列中,則可以使用BlockingCollection作爲隊列的集合,以便對集合的多線程訪問不成問題。

具體的收集類型可以是BlockingCollection<Action>。沒有必要管理允許任何其他委託簽名。對於任何輸出你沒有什麼可做的,你不會有任何參數給它。如果有人希望調用具有參數的方法,他們可以通過函數來​​修改參數(可能使用lambda,如() => someFunction(param1, param2);)。

+0

謝謝,你們倆都非常有幫助。我希望我可以檢查多於一個人的標記! – Tsproggy