碰撞檢測是那些老的一個,隱藏編碼遊戲的問題通常人們會選擇darkpenguin以某種方式預先計算你的靜態地圖上的哪些位置是不可放置的。下一步是想出一種方法來指定最有效的碰撞圖。
你不希望你的遊戲做一噸的數學響應用戶移動他們的鼠標 - 它需要短而快 - 所以預先計算下來的東西快是至關重要的。
如果您的地圖是一個網格,那麼你有你的答案就在那裏 - 碰撞地圖是預先計算的二維數組 - 基本上與網格上的每一個地方一個像素很小的黑白圖像。白色像素(1)可放置,黑色像素(0)不可放置。您只需使用這個真/假的二維數組作爲查找。如果您想節省內存,您可以將網格上的每個32位空格分隔成單個位標誌。
如果你的地圖不是網格,那麼你仍然想要預先計算的東西,但是這個策略有點複雜。第一種可能性是像Hitesh那樣執行數學運算以生成稍微更高分辨率的碰撞圖,其餘部分與網格策略完全相同 - 例如,如果每個4x4像素塊都是一個碰撞入口,那麼塔是否可以是放置是一個測試,以確定它的座標是否在1以上 - 你可能需要100%的測試爲1,或者你可以讓它們達到一點,讓75%的測試爲1。
如果這還不夠詳細,您可以做這些更復雜的多邊形測試,但您希望它們儘可能簡單。當不使用預先計算好的網格時,最簡單的2D碰撞測試是2個圓圈 - 您只需計算它們中心之間的距離並檢查它們大於還是小於它們的半徑之和。如果您預先將您的怪物路徑預先計算爲一系列圓圈,那麼下一步就是將這些圓圈分成......猜猜看......網格。這可以防止每次檢查都必須測試地圖上的每個圓圈。這使得您可以在碰撞圖中包含大量的這些圓,因爲碰撞測試首先查找塔目前正在結束的網格輸入,然後檢查它是否與最接近的圓相碰撞,而不是整個地圖。請注意,此預先計算的圓形列表網格在多個相鄰網格條目中通常會具有相同的圓形,因爲包含給定圓形的任何部分的每個網格條目都必須在其碰撞檢查清單中包含該圓形。
關於前兩種網格方法的好處之一是它很容易進行QA測試 - 從字面上將碰撞圖存儲爲圖像並進行視覺檢查,以確保它看起來適合它所基於的地圖。如果您不想編寫代碼來生成它們,也可以手動繪製它。
圓形方法爲您提供了合法的曲線,並可以導致更細微的碰撞邊緣細節,但它顯然更難以測試並確保沒有地圖具有不良碰撞貼圖。編寫地圖生成工具也是更多的工作。
祝你好運!