2010-11-15 86 views
12

將Cython作爲遊戲的主要編程語言有多實用?使用Cython進行遊戲開發?

我是一個有經驗的Python程序員,我絕對喜歡它,但我承認一個新手,當談到遊戲專門編程。我知道通常Python被認爲太慢而無法進行任何嚴肅的遊戲編程,這就是爲什麼Cython對我很有趣。使用Cython,我可以使用類似Python的語言,速度爲C。我知道我可能需要學習一點C/C++,但似乎Cython會加快開發時間比較。

那麼,它是否實用?我仍然可以使用OpenGL,Op​​enAL和Bullet Physics等C/C++庫嗎?

+0

http://docs.cython.org/src/userguide/external_C_code.html – 2010-11-15 01:54:50

+0

這在很大程度上取決於你的遊戲是否是井字棋或第一人稱射擊遊戲... ;-) – 2010-11-15 02:09:57

回答

15

如果您正在使用這樣的組合,並且您的目標是編寫3D遊戲,那麼您可能會從具有成熟物理和音頻綁定以及Python API的現成3D引擎中獲得更好的性能OGRE 3DPython-OGRE)或Panda3D。即使你不這樣做,這篇關於using Cython with Panda3D的文章可能會有所幫助。

我不知道了,但back in 2007,權衡兩者之間基本上是:

  • Panda3D的是更好的文件證明和設計從地面行動是一個C++加速的Python引擎(顯然他們做出了一些C++引擎項目不會出現的API設計決策),可以預見的是,它有一個更成熟的Python API。
  • PyOgre建立在一個更先進的引擎之上,擁有更大更有活力的社區。

...但它很可能是可能已經改變,因爲,隨着時間推移不談,在2007年的Panda3D仍在一個GPL不兼容的授權,並且開走了很多人。 (包括我自己)

+0

+1設法爲這個問題提供一個潛在有用的答案。我認爲這是無望的。 – 2010-11-15 02:10:53

+3

作爲一個說明,Python-Ogre現在幾乎已經死了,特別是因爲網站已經完全沒了:-( – 2014-04-05 00:30:06

5

我發現很多時候,特別是對於大型圖書館,你花費了大量的時間來配置Cython項目來構建,知道要導入哪些結構,將C代碼連接到Python中雖然Cython是一個很好的權宜之計(比單純的C/C++開發更令人愉快),但你必須學會​​有效使用C++的數量,這基本上意味着你將不得不咬牙切齒,無論如何學習C++。

PyGame怎麼樣?

-1

主題!!!一個好的現代遊戲必須使用線程。 用Cython幾乎禁止其使用,抱着GIL(全局解釋器鎖)的整段時間,使你的代碼運行的順序。

如果你不寫一個巨大的遊戲,比Python /用Cython是好的。但是,如果沒有良好的線程支持,Cython就不會成爲現代語言。

+1

)如果你的代碼沒有碰到Python對象,你可以釋放GIL在nogil塊中。函數也可以註釋爲「nogil」。現在,Cython擁有本地數組,所以你可以在不觸及Python對象的情況下做很多事情。 – Winterstream 2013-02-11 14:31:24

6

在此日期(2011年4月12日)unixmab83是錯誤的。

用Cython並不禁止使用線程,你只需要使用特殊no_gil陳述。

除了C++的bindins現在在cython中起作用。

我們使用它來接近gamedev。所以雖然我不能在這個最後,cython是一個有效的候選人。

7

我是Ignifuga Game Engine的開發人員,它是面向2D和基於Python/Cython/SDL的。我通常所做的就是用Python開發代碼,然後對引擎進行剖析,以查看是否存在一些明顯的瓶頸(主循環,渲染代碼是很好的候選者),並將這些模塊轉換爲Cython。然後我通過Cython運行所有代碼(基於Python和Cython),並對SDL進行靜態編譯。另一個Cython的大「優點」是綁定到SDL或任何基於C的庫幾乎是微不足道的。 關於線程,引擎目前是單線程協同多任務,通過Greenlets,雖然這是來自一個設計決定,以緩解未經驗的開發人員可能陷入潛在的多線程陷阱,而不是對Cython的限制。

0

我知道Cython,你不必知道C/C++。 您將使用靜態打字,但很容易。 最難的部分是讓編譯工作,我認爲在Windows上這是通過視覺工作室的事情完成的。 有一些像標準庫,包括數學例如。速度增益不是太大,但這取決於你的範圍。 ctypes要快得多(純C),但與Python的連接非常緩慢,因此我決定尋找可以仍然是動態的Cython。

對於遊戲中的速度增益,Cython將是正確的選擇,但我將這個性能命名也是有限的。