2012-12-15 107 views
-3

我一直在做一個非常簡單的2D遊戲,它非常基本,它有一個Play類,裏面有init,渲染和更新等方法,我製作了2D地圖並且一個在有鍵盤輸入時四處移動的播放器,只需使用If語句即可完成。遊戲種類有一個可以向上,向下,向左和向右移動的寵物小精靈視圖(俯視圖)。在我的地圖上有一個障礙,當我玩遊戲時,玩家只是穿過障礙物,我希望玩家在到達障礙物時停下來,不能穿過障礙物,因此我研究了碰撞檢測並進行了管理,使一個開始,在我的代碼我已經取得2個矩形:Java 2D遊戲矩形碰撞共鳴

Rectangle rectOne = new Rectangle(buckyPositionX, buckyPositionY, 40, 40); 
Rectangle rectTwo = new Rectangle(-100, -143, 70,70); 

,並也取得了返回true,如果兩個矩形相交變量x的布爾:

boolean x = rectOne.intersects(rectTwo); 

這樣做了以後我現在對如何對java說話感到困惑,如果boolean返回true,則停止播放器通過矩形,我知道它是一個if狀態如果x返回true,但我不知道要在它裏面放什麼,我希望一些更有經驗的用戶可以幫助解決這個問題。

+1

考慮的話,擺率不包含根據FF'發現',提示我問。你有問題嗎?如果是,那是什麼? v另外,如果'本多佛'是你的真實姓名,我建議你將你的ID改爲'本傑明多佛',如果不是的話,我建議你'長大',並停止在疲憊的笑話中使用角色作爲ID。 –

+0

我的名字實際上是Ben,但我當時在做我的帳戶時的朋友實際上已將我的姓氏設置爲Dover,我已經長時間使用了這個雅虎帳戶,並且全名僅在我進入該論壇時出現,對不起關於那個。 –

+0

關於多個問題,我是Java新手,我的第一個問題非常模糊,因爲我不知道我在做什麼,當人們不明確我的問題和線程啓動時,這會導致更多的混淆我慢慢了解到,我可以使用不同類型的碰撞,並最終達到了我瞭解關於矩形碰撞的基本知識點,因爲我學到了更多關於Java的知識,我認爲提出一個新問題可能比工作更好與舊的東西在脫離話題。 –

回答

1

我的建議是編寫一個方法changeBuckyPos,檢查衝突並更新buckyPositionXbuckyPositionY如果沒有衝突。

public void changeBuckyPos(float deltaX, float deltaY) { 
    float newX = buckyPositionX + deltaX; 
    float newY = buckyPositionY + deltaY; 

    // check for collisions 
    Rectangle rectOne = new Rectangle((int)newX, (int)newY, 40, 40); 
    Rectangle rectTwo = new Rectangle(-100, -143, 70,70); 

    if (!rectOne.intersects(rectTwo)) { 
    buckyPositionX = newX;   
    buckyPositionY = newY;   
    } 
} 

這也可以用於所有的按鍵事件處理函數是在當前的代碼,以使其更清晰,像這樣:「?」

public void changeBuckyPos(float deltaX, float deltaY) { 
    float newX = buckyPositionX + deltaX; 
    float newY = buckyPositionY + deltaY; 

    // check for collisions 
    Rectangle rectOne = new Rectangle((int)newX, (int)newY, 40, 40); 
    Rectangle rectTwo = new Rectangle(-100, -143, 70,70); 

    if (!rectOne.intersects(rectTwo)) { 
    // check global limits 
    if ((newX > -1000) && (newX < 1000) && (newY > -1000) && (newY < 1000)) { 
     buckyPositionX = newX; 
     buckyPositionY = newY; 
    } 
    } 
} 
+0

謝謝你的代碼,我使用的是你發佈的第一個代碼,因爲它看起來更簡單,我把它放在我的更新方法之後,並將mu buckyPositionX和Y更改爲浮點數,清除了大部分錯誤,但現在我得到2更多的錯誤,根據rectOne它說構造函數Rectangle(float,float,int,int)是未定義的,下一個錯誤是changeBuckyPos,它表示void是值爲changeBuckyPos的無效類型。你能幫我解決這些錯誤嗎?謝謝。 –

+0

編輯代碼來修復矩形錯誤 - 變量必須轉換爲「int」。 – schnaader

+0

謝謝,它已經修復了所有的錯誤,但是我碰到了碰撞問題,當我去遊戲的座標時什麼都沒有發生,我的意思是我認爲代碼會阻止玩家穿過我的房子地圖在他們的座標。 –