2013-02-01 22 views
0

我正在用兩個進程寫一個遊戲。一個用OpenGL進行渲染。另一個用於碰撞檢測。這樣我就可以使用多個核心。使用pygames碰撞模塊沒有初始化顯示

但是,我不能使用任何pygame表面沒有打開顯示。所以我不能使用位掩碼來做像素完美的碰撞或任何其他碰撞。

我試圖簡單地打開另一個窗口只是爲了看看我是否可以使用Surfaces,但是我無法打開第二個pygame窗口而沒有獲得OpenGL函數錯誤。

你可以在兩個獨立的進程中用pygame打開兩個非OpenGL窗口,但我使用的是OpenGL。

我覺得可能有某處我可以插入一個指向顯示的指針,讓表面停止說Dead Display。某種類型的SDL變量,我可以在第二個過程中操作來說「它不是死在這裏」。或者使用像素完美碰撞的其他方式。

我打開像素完美的替代品,不使用pygame。

+0

您正在使用多處理,而不是線程?你可能可以,但這聽起來像是不成熟的優化。 – ninMonkey

+0

其不是。我只能在屏幕上獲得40個形狀,但是如果我專門給一個內核渲染,我會得到200個。我正在使用線程插座連接udp和tcp,以便從主線程竊取更多。我瞄準minimun玩是雙核2.0的我有一個四核3.5和運行在一個單一的3.5仍然比大多數人更多。雙重流程使其更加可行。 – Kaliber64

回答

1

你應該罰款200,渲染和碰撞相同的線程,相同的CPU。這個測試在沒有四叉樹的情況下循環,然後打開它。

然後將阻止代碼(網絡)移動到另一個線程。從運行示例

引用:

實測值峯。這臺電腦的性能不會比現在好。 會通常有359400次碰撞檢查, 但這個四叉樹它減少到大約241碰撞檢查

original is pygame.org但它需要一個小編輯:http://pastebin.com/U371LaLy

enter image description here

+0

我很感謝你爲四叉樹的簡單實現。我希望我可以使用它。這解決了太多碰撞的開銷,我可能會從40到100-140 buuuut。如果您旋轉精靈(不是圓圈),則必須重新生成位掩碼,因爲您無法單獨旋轉位掩碼。我將其限制爲每秒最多10次,或者如果旋轉角度大於20度以保持準確性。如果我沒有做那兩個月前我會放棄的人。如果形狀不是圓形並且它旋轉,那麼像素完美的蒙版可以很多地被再生。 – Kaliber64

+0

另外我看到它運行在13 fps!有236個物體。你瘋了嗎?> – Kaliber64

+0

你沒看過。那是在啓用Quad之前。當它的時候,然後**我得到50fps使用少於我的CPU的20%**。這甚至不使用numpy或其他優化。 – ninMonkey

0

我要去使用pymunk。 Chipmunk的蟒港。

我剛剛開始編程時,一年前我做了一個愚蠢的實驗。這很容易。我完全忘了它。

我無法讓pybox2d在任何python版本中工作。