2012-01-06 66 views
0

我在我的遊戲中有一個名爲Core的課程,其中大部分經理都在其中。他們走到這裏是因爲當遊戲啓動時,我的所有資源,語言數據,位圖,聲音都會被管理人員加載。應該如何通過多個課程來完成課程傳遞?

之後,創建場景管理器並初始化第一個場景。

問題帶有來自上層階級共享數據,以降低一級類,如場景。

當一個場景開始,它需要請求位圖和從經理的聲音。大多數場景還需要根據語言查找單詞以放置按鈕。

我這樣做的方式是通過一種經理經理類。它由大多數場景使用的每種類型的經理構建而成。這被傳遞給場景管理器,該場景管理器將指針傳遞給當前場景。

這意味着每一次我有一個新的經理,我需要改變管理經理的構造,並在現場經理改變了一些東西。

有沒有更好的方法來做到這一點?這種事情通常如何完成?

謝謝

回答

2

這樣做的最常見的方法是使用一個單例。僅僅因爲這很普遍,並不意味着它是最好的方式。

一種不同的方式做同樣的事情是dependency injection。一個類的構造函數將會指向它需要的管理器。這提供了在一個地方收集所有依賴關係的好處,並且可以讓您輕鬆地將測試代碼替換爲任何管理者。

0

對於全球可用的功能和數據,我會建議你單身模式。 如果您需要針對不同場景使用不同的數據,則應考慮使用多單例(將字符串傳遞給getInstance函數)或編寫一個接口,該接口具有通過字符串/名稱(如Java中的Property類)訪問數據的函數。

+0

單身?這不是現在的反模式嗎? – Lalaland 2012-01-06 22:54:24

+1

它仍然廣爲傳播,我不明白這一點,爲什麼我應該拒絕的解決方案,只是因爲它不是在時尚多了 – Paranaix 2012-01-06 22:58:21

+1

@paranaix:也許有某種原因,爲什麼它沒有考慮任何已經不夠好.. – tp1 2012-01-07 00:06:43

0

有一個單class Root它包含所有的管理人員。在初始化期間,Root對象構造所有管理器。然後,您可以爲所有經理添加獲取函數。

這個作品真的很好,因爲在代碼的任何地方,你可以調用

Root::getPtr()->getTextureManager()->whatever()