2012-07-29 50 views
4

假設你是一家大公司,並製作一部巨大的,大片的標題,將瞄準PC,Mac,Xbox和PS3。假設您選擇了C++,因爲大多數工作室都傾向於這樣做。你寫的哪部分是可移植的代碼?是否可以真正寫一個便攜式遊戲?如果你去一個新的平臺,你是否必須重寫渲染引擎和用戶界面?在現代遊戲設計中,遊戲的哪些部分被編寫爲便攜式?

+1

我儘可能合理地假設。 – someguy 2012-07-29 15:19:47

回答

2

一個有教養的猜測是,除硬件相關的代碼之外的所有東西都被寫成可移植的。即遊戲邏輯,矢量圖形,聲音(?)是(相當)便攜式,圖形輸出,內存管理,時間不是(總是)。

有了很好的庫選擇,人們可以最大化便攜式代碼的數量。

1

你當然不能要求你的PC玩家使用360控制器。

渲染和用戶界面必須至少從頭開始重新完成。此外,另外,其他操作系統相關的功能(如聯網)也可能需要重新進行改造。畢竟,boost::asio可能無法在PS3上運行。一些其他處理器特定的東西,如矢量化

但是,理想情況下,遊戲將盡可能多地使用便攜式代碼。

1

通常,我會假設是否有物理引擎,這將是便攜式。玩家系統,如健康,庫存,NPC行爲等也將是平臺獨立的。你將不得不重寫渲染引擎,這很可能取決於遊戲的控制檯。由於必須與不同的控制器進行交互,用戶交互可能會有一些重寫,而這些控制器很可能在每個控制檯中以不同方式訪問。

一般情況下,如果代碼與控制檯的API交互,渲染,矢量化,用戶界面,輸入等將不得不重寫。像物理學,基本行爲,Ai和健康庫存管理等基本代碼並不需要重寫。

所以最後:如果它依賴於硬件,它將不得不被重寫或重構。

1

堅持DRY原則還導致更便攜的代碼,因爲任何非可移植的代碼都是本地化的。

例如,避免在代碼中多次執行此操作:

#if defined(PC) 
    // create a network connection PC-style 
#elif defined(XBOX) 
    // create a network connection XBox-style 
#elif defined(MAC) 
    // create a network connection Mac-style 
#elif defined(PS3) 
    // create a network connection PS3-style 
#endif 

,而是,做一次,創建一個功能

createNetworkConnection(); 

您在多個地方使用。