簡體   English   中英

用於游戲的Java碰撞檢測

[英]Collision Detection in Java for a game

我和其他幾個人一起用Java制作游戲,但是我們仍然堅持使用它的一部分,進行碰撞檢測。 游戲是一個RPG,我知道如何使用矩形與角色進行碰撞檢測,但我不知道該怎么辦是地圖的碰撞檢測。 我的意思是,所以這個角色不能走過樹木或水,而那些東西,但使用矩形似乎不是這里最好的選擇。

好吧,解釋一下游戲地圖會是什么樣子,這里有一個例子http://i980.photobucket.com/albums/ae287/gordsmash/7-8.jpg

現在我可以使用矩形來限制並阻止玩家在樹木和水上行走,但這會占用很多。

但除了使用矩形之外,還有另一種更簡單的方法可以防止玩家越過樹木和障礙物嗎?

這是一個簡單的方法,但它使用更多的內存,你可以預先做好工作......只需創建一個背景碰撞掩碼,表示字符以二進制形式行走的允許區域。 您可以以某種壓縮位圖形式存儲它。 然后查找非常簡單,非常快。

矩形碰撞檢測似乎有意義; 但是,您也可以嘗試球面碰撞檢測,它可以更快地檢測到碰撞。 您甚至不需要平方根進行距離計算,因為您可以比較平方距離以查看球體是否重疊。 這是一種非常快速的方法,並且鑒於您的游戲性質可以很好地工作。

也! 假設您有許多正在碰撞的瓷磚,請考慮一些空間划分方法。 讓我舉一個簡單的例子 - 將您的地圖細分為幾個矩形(http://www.staff.ncl.ac.uk/qiuhua.liang/Research/Pic_research/mine_grid.jpg),然后根據您的播放器的矩形區域目前居住在 - 僅針對位於該區域內的瓷磚檢查碰撞。

您可以更進一步 - 如果您在任何給定區域中的瓷磚數量超過您設置的閾值 - 進一步細分該區域以使其中的區域更小。

這種細分背后的想法叫做Quadtree,關於這個主題有大量的論文和教程,你會很快就會流行起來。

請讓我知道,如果你有任何問題。

這類問題有很多解決方案,但對於你正在做的事情,我相信最好的做法是使用一個磁貼引擎。 這在過去的類似游戲中經常被使用(想想SNES上的任何RPG),它為您提供了一種快速簡便的水平/地圖設計和碰撞檢測方法。

tile引擎的基本概念是對象存儲在2D數組中,當您的玩家(或任何其他移動的游戲實體)嘗試移動到新的tile時,您執行一個簡單的檢查以查看該tile中的對象是否可以通過或不(例如,如果它是草,玩家可以移動;如果它是寶箱,則玩家不能移動)。 這將極大地簡化對沖突的檢查(因為對實體列表的天真檢查將具有O(n ^ 2)性能)。 這張照片可能會讓你知道我在說什么。 這些線條已被添加以說明一點,但當然,當你在玩游戲時,你並沒有積極地想到所有東西都是由單獨的32x32像素磁貼組成。

雖然我個人對Java中的tile引擎沒有任何經驗,但看起來Mappy支持Java,我聽說過PulpCore的消息 當然,你非常歡迎你創造自己的發動機,但是你必須決定你的努力是否更好地重新發明輪子(當然,那將是你的輪子,那是相當令人滿意的)或花費你的時間做得更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM