2015-07-19 60 views
0

我正在使用SDL2進行遊戲。級別對象衝突

我有一個SDL_Rects(即矩形對象)的std :: vector,它包含我的遊戲中一個關卡的固體平臺(即玩家無法穿過的平臺)。

當碰撞檢查,我當前的代碼執行以下操作:

for (SDL_Rect rect : rects) { 
    if (player.collides(rect)) { 
     // handle collision 
    } 
} 

考慮我有很多(例如500)堅實的平臺,矩形的水平,是低效的經歷所有這些,檢查碰撞?有一個更好的方法嗎?

collides()函數只檢查AABB碰撞(4個簡單條件)。

回答

0

我認爲這是合理的。你有簡單的形狀,並正在做簡單的碰撞檢查。想象一下更激烈的遊戲。即便如此,他們可能會爲角色設置一個複雜的骨架網格,但只需對一個易於計算的邊界形狀進行碰撞檢查,並且它們可能同時發生超過500個事件。

在一個更加複雜的遊戲引擎中,不同類型可能會阻止某些類型和不阻塞其他類型,因此不僅會檢查簡單重疊事件,還必須知道重疊對象是否應該交互。或者對於不同的對象可能會有不同的交互。所以除非你知道你有用遊戲邏輯(複雜的路徑查找或AI或其他類似的東西)慢慢地做某件事的危險,否則我將我的優化工作集中在渲染上。