【Hibernate步步為營】--雙向關聯一對一映射詳解(一)

來源:互聯網
上載者:User

標籤:c   a   資料   set   演算法   os   

摘要:本文以我自己設計植物大戰殭屍碰撞檢測演算法為例進行分析,淺談遊戲開發中碰撞檢測演算法。本文所提及的碰撞演算法與資料結構也可應用於跑酷等遊戲中。


關鍵最佳化技術1:只檢測邏輯上可能存在碰撞關係的物體。比如植物大戰殭屍中,植物發射的子彈只能打擊其所在行的殭屍,因此子彈只需遍曆檢測本行的殭屍,而不是存在情境中的全部殭屍。對於地鐵跑酷,奔牛跑酷,吃金幣的碰撞檢測演算法亦是如此。


關鍵最佳化技術2:子彈檢測碰撞殭屍,或是殭屍檢測碰撞子彈,誰檢測誰碰撞誰的問題,這個可能跟具體項目息息相關。可以從演算法效率,以及設計模式上角度出發進行考慮。


關鍵最佳化技術3:精細範圍檢測。比如絕大多數情況下,排在最前方的子彈會首先打擊到排在最前方的殭屍。後面的所有子彈在第一個子彈沒有碰撞的情況下,無需進行碰撞檢測,問題轉化為一個子彈檢測一個殭屍!。


關鍵最佳化技術4:注意精細範圍的切換,因為殭屍進入植物區後,最佳化後,準確的說是越過能發射豌豆的植物。本行的所有子彈都需要檢測本行所有的殭屍。此點可保證演算法的正確性。


關鍵最佳化技術5:資料結構的選取。鑒於遊戲的設計,殭屍和子彈的集合是一個頻繁的插入和刪除的集合。因為關鍵最佳化技術3,我們需要集合保持有序!

有序數組並不合適,利用二分尋找法確定插入位置,時間複雜度O(lgN),但因為插入刪除操作過於頻繁,數組會浪費大量效能來維護記憶體時間複雜度為O(N)。

那麼有序鏈表呢?有序鏈表的插入和刪除無需大量操作記憶體時間複雜度O(1),但是順序遍曆確定插入位置,時間複雜度為O(N)。

既能保持有序,又能快速的插入和刪除的資料結構,紅/黑樹狀結構,或是帶有排序功能的雜湊表。我們可以利用C++ STL的set或是iOS sdk orderedSet已有實現。


關鍵最佳化技術6:享元模式運用。記憶體池,即殭屍池和子彈池,避免重複建立對象,反覆開闢記憶體。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.