2016-07-11 232 views
3

晚上好(來自歐洲)。2D遊戲引擎如何組織遊戲對象?

我正在嘗試使用python和pygame
創建一個2D遊戲引擎,它將與Unity 3D類似地工作 ,但您將只能創建2D遊戲。
爲了解釋我的問題,我會告訴你我需要的一些課程
在我繼續之前知道。


我有一個名爲雪碧代表我的遊戲對象,而我們關心的是渲染方法的方法類。這種方法每秒鐘被稱爲 ,並將精靈對象的圖像繪製到屏幕中。 它也調用另一種方法更新你可以覆蓋和創建一些 邏輯你的精靈對象(我稱之爲大腦:P)。我還有一個類場景我將所有我的精靈對象存儲到鏈接列表中。

爲了使我的場景我所有的遊戲對象創建我場景類中的方法與上面的算法:

#obj is a sprite object. 
#Is been called every frame per second. 
for obj in gameobjects: 
    obj.render() 

正如你可以看到這是爲了使所有的simpliest方式我的場景的gameobjects。這是我的問題開始的地方。如果我們說我有10.000場比賽 物體進場,這個for循環會延遲幀造成延遲問題。

我想過的一個解決方案是僅渲染我能看到的遊戲對象(窗口邊框內的遊戲對象) 。這很好用 但問題是我必須檢查所有進入我的 場景的遊戲對象是否在窗口分辨率內並僅渲染它們。所以我做了這樣的事情:

#This method is been called only every time there is a movement 
#action into te game causing all the game objects to change position. 
for obj in all_game_objects: 
    if inside_resolution(obj): 
     render_objects.append(obj) 

#Is been called every frame per second. 
for obj in render_objects: 
    obj.render() 

正如你可以看到我仍然需要檢查所有gameobjects,所以我沒有成功的事!

如果我能以某種方式將我的遊戲對象組織成像二叉樹這樣的數據結構,並創建一些智能方法,只返回窗口分辨率內的遊戲對象,我可以成功實現快速渲染系統。

所以我的整個問題是什麼數據結構可以用來存儲我的遊戲對象? 樹會非常快,但我怎麼知道哪些遊戲對象在 屏幕分辨率內沒有全部檢查?

從什麼都聽過,現代遊戲引擎,如unity3D使用樹 渲染場景的不同區域(以及其中觀賞距離適合在那裏有)。該事情是如何工作的。

我希望我的問題的描述就夠了。
感謝您的耐心配合:p

+0

四叉樹是一種快速確定哪些對象位於空間某些部分內的相對常見方式。 –

+1

你有沒有試過*渲染10000個對象,並確定知道*渲染循環是你應用程序的主要瓶頸?如果你還沒有,那麼這只是[早熟優化](http://c2.com/cgi/wiki?PrematureOptimization)的另一種情況。大多數渲染庫足夠高效,可以無縫地渲染10000個對象。如果你完全確信渲染循環導致性能瓶頸,那麼只有讓其他人花時間幫助你。 – EvilTak

+0

噢,如果實際上是瓶頸,你可能需要考慮在不同的線程中做所有的渲染。你做的事實際上是提高性能的最簡單的方法*如果*這是問題。你將**擁有**遍歷每個對象,並且無論如何運行它的更新方法,那麼爲什麼不這樣做呢?實際上,您可以將所有渲染代碼移動到「Camera」或類似的類中,並且每個對象都可以通知每個相機是否已經離開或進入了它的視口。此調查將在調用渲染之前爲每個對象運行。 – EvilTak

回答

0

將您的所有對象放在2維網格中,其中網格代表您的整個場景。然後,您可以輕鬆地僅遍歷屏幕上可見的那些。現在碰撞檢測變得更容易。

單元的大小取決於您。嘗試不同的尺寸,看看哪一個工作最好