2012-12-25 133 views
-1

我在過去提出過類似問題的線索,但由於缺乏詳細信息,答案並沒有真正與我所需要的相關,因此我將盡可能詳細地解釋我的問題我可以,希望你能更容易理解我的需求。Java碰撞檢測不工作

我在YouTube上觀看了Bucky的光滑遊戲教程並製作了2D Java遊戲,該遊戲基本上是一個從上方觀看的2D播放器(鳥瞰圖),可以在用戶鍵盤輸入(左上,右下,左, 對)。玩家移動的地圖非常小,因此必須設置界限,以便玩家不能離開地圖,以便更好地瞭解如何完成此操作,以下是設置voundries的教程:

http://www.youtube.com/watch?v=FgGRHId8Fn8

視頻也將顯示遊戲你到底是什麼樣。 問題是,這些邊界只需要一個軸,這意味着如果玩家走下來,就會說「如果玩家到達X軸上的座標(數字),則將玩家的移動改變到相反的方向,以至於他不能再往前走。「 現在這對我造成一個問題,因爲這隻需要一個座標軸,所以很容易設置和理解,但如果您看視頻,地圖上有一間房子,我希望我的播放器不能走過此外,但這涉及2個維度,我已經看過矩形碰撞之類的東西,並且在其他帖子中看到了與它們有關的東西,但我感到困惑,因爲我是Java的新手,並且除了觀看之外還沒有真正做過很多事情Bucky的教程。

我的代碼目前爲我的遊戲類獲得了以下方法:init,render和update。所以總結一下,我真的只想設置一種不讓我的玩家在房子裏散步的方式,我也會提到(我應該在其他主題中提到它),因爲我對Java很陌生,能否請您採取一步一步的方法向我展示如何設置碰撞,我的意思是甚至根據需要製作矩形。

如果我的代碼是必需的,請告訴我,我會盡快發佈。

預先感謝您。

回答

0

兩個可能的選擇:

  1. 擴展ShapeRectangle或相關油滑的對象(它們應該存在IMO),只是檢查intersect()

  2. 查找(x1,y1)(x2,y2)值,它啓動外面,最後在裏面。

假設你已經相交()方法:

//Grab the previous position 
prevPosX = movingobject.X; 
prevPosY = movingobject.Y; 
//Update the position 
movingobject.update(); 

//Test for collision 
if(movingobject.intersects(targetobj)) { 
    //If it collided, move it back 
    movingobject.X = prevPosX; 
    movingobject.Y = prevPosY; 
    //And reverse the direction 
    //(might want to do other stuff - e.g. just stop the object) 
    movingobject.speed *= -1; //Reverse the speed 
} 
+0

謝謝您的回覆,但請您告訴我在使兩個矩形相交後,if語句會是什麼樣子?我的意思是,我如何告訴java,如果它相交,那麼阻止它進一步進入另一個矩形? –

+0

添加了一個示例 –

+0

我很抱歉,但我不明白如何執行您寫入我的遊戲代碼的代碼,我瞭解您的代碼是如何工作的,因爲您已經完成了一項出色的工作,並用評論解釋它,但我認爲它不起作用與我的代碼,因爲你的代碼從變量獲取X和Y座標,但在我的代碼中,變量已經是coorinates,我已經附加了我的代碼,以幫助您瞭解我的意思,buckyPositionX和buckyPositionY是已經保存X,Y座標,但是當我嘗試更改您的代碼以適合我時,會出現大量錯誤。 –

0

您可以設置董事會作爲具有類的2x2的網格具有財產,如「isBlocked」。默認情況下,棋盤的邊緣會將此屬性設置爲true以防止角色走出邊緣。當您添加其他障礙物(如房屋或牆壁)時,物體佔據的網格位置也會將該屬性設置爲true。然後,在移動角色時,只需檢查角色移動到的網格位置是否將屬性設置爲false,以查看是否允許移動。這也使得保存級別數據變得非常簡單,以便稍後您可以從磁盤加載它們。

0

在這種情況下,您的更新類還應該添加一個條件來尋找房子。 (x1,y1)(x1,y2)(x2,y2)(x3,y1),你必須添加一個條件來創建(假設矩形房屋這裏的其他形狀只是改變x和y值)確定 x值不在x1和x2之間,同時y值不能在y1和y2之間。

+0

感謝您花時間回覆我的問題。我理解你所說的背後的理論,但只是不懂如何編寫代碼,如果你有時間,請告訴我如何編寫代碼。 –

+0

您可以使用基本條件來檢查x和y類似的東西:if((x x2))&&((y y y2)) – ravdhaw

+0

同時檢查對象碰撞的方向。假設這個人是從頂端來的,所以在這種情況下,上面的條件會導致類似的情況:if((x> x1)&&(x y1)&&(y ravdhaw