2011-03-05 184 views
3

林做在Java中的遊戲與其他幾個人,但我們是停留在它的一個組成部分,使碰撞檢測。遊戲是一個RPG遊戲,我知道如何使用矩形對角色進行碰撞檢測,但是我不知道該怎麼做是地圖的碰撞檢測。我的意思是說,角色不能漫過樹木或水,而使用矩形的東西似乎不是這裏最好的選擇。碰撞檢測中的Java的遊戲

好解釋什麼是遊戲的地圖,因爲我的樣子,這裏有一個例子http://i980.photobucket.com/albums/ae287/gordsmash/7-8.jpg

現在我可以使用矩形獲得界限,並從走在樹木和水停的球員,但是這將需要大量的其中。

但有另一種以阻止玩家行走在樹木和障礙除了使用矩形更簡單的方法?

+1

這對http://gamedev.stackexchange.com很有用 – 2011-03-05 15:11:51

回答

1

這裏有一個簡單的方法,但它使用更多的內存和你做的工作了前面......只需要創建一個背景碰撞掩碼錶示允許領域字符以二進制形式走。您可以用某種壓縮的位圖形式存儲它。查找過程非常簡單而且非常快速。

+0

這似乎是一種很好的碰撞檢測方法,但我想知道如何編程?我認爲我們之前正在考慮這樣做,但我們不知道如何獲得這樣的大對象的每個角落和邊的座標。 – gordsmash 2011-03-06 14:37:42

+0

實際上,您將背景圖像的副本加載到編輯器中並手動(如果您無法以編程方式進行操作),請繪製所有區域以創建碰撞蒙版;黑色適合步行,白色適合不適合。如果您使用的是瓷磚,則可以針對每種瓷磚類型執行一次。隨着精靈移動,您可以從掩碼中獲取代表其新位置的矩形,或者根據需要從幾個圖塊碰撞蒙版創建一個矩形。然後,您可以與精靈掩碼進行AND運算,並檢查結果是否包含任何非零像素。如果有的話,你遇到了碰撞並放棄了這一舉動。 – 2011-03-06 16:48:20

0

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

也!假設你有很多正在碰撞的瓷磚,請考慮一些空間分區的方法。讓我給你一個簡單的例子 - 將你的地圖細分爲幾個矩形(http://www.staff.ncl.ac.uk/qiuhua.liang/Research/Pic_research/mine_grid.jpg),然後根據你的玩家的矩形區域目前居住在 - 只檢查位於該區域內的瓷磚的碰撞。

你可以讓了一步 - 如果你比你設置的閾值的任何給定區域有更多的瓷磚 - 細分該區域進一步在其內使更多的較小的區域。

這種細分背後的想法被稱爲四叉樹,並有一個巨大的關於這一主題的文章和教程的數量,你會很快流行起來。

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

0

有這種類型的問題,許多解決方案,但你在做什麼,我相信最好的行動當然是使用瓷磚引擎。這在過去類似的遊戲中會被廣泛使用(想想SNES上的任何RPG),它爲您提供了一個快速簡便的水平/地圖設計和碰撞檢測方法。

瓦片引擎的基本概念是,對象存儲在二維數組中,當玩家(或任何其他移動遊戲實體)嘗試移動到新瓦片時,您會執行一次簡單檢查,以查看該對象是否在該瓷磚是否可以通過(例如,如果它是草地,玩家可能會移動;如果它是寶箱,則玩家不能移動)。這將大大簡化檢查衝突(因爲對實體列表的天真檢查將具有O(n^2)性能)。 This picture可能會讓你知道我在說什麼。這些線條已經被添加來說明一個觀點,但是當你在玩遊戲時,你不會主動將所有內容都視爲由單個32x32像素圖塊組成。

雖然我不親自在Java的瓷磚引擎的經驗,它看起來像Mappy支持Java,而且我聽說過PulpCore好東西。當然,你非常歡迎創造你自己的引擎,但是你必須決定是否花費更多的精力來重新發明輪子(當然,那當然是你的輪子,而且這非常令人滿意)或花時間製作更好的遊戲。