2014-06-13 26 views
1

我的標題可能不是很清楚(不知道如何解釋它),但我一直在努力尋找一個遊戲界面,試圖找到最好的方式來獲得好的命中檢測我的步行按鈕。這是最終的結果應該是什麼樣子:三角形按鈕(libgdx)更好的命中檢測

4 buttons

我嘗試的第一個辦法是給每個三角形在它自己的獨立和公正的使用按鈕爲每個但問題是我來到這個是一個圖像需要在矩形形狀內部,因此4個按鈕之間有重疊,向左移動可能會觸發向上按鈕,因此我決定嘗試其他方法。

第二種方法是把整個圖像作爲一個按鈕,然後手動設置每個按鈕的y和x,但我能想到的唯一方法是通過循環以便能夠有一些準確觸摸的感覺和這個想法只是感覺有點馬虎。

下面是一個例子,但x和y的比例是完全錯誤的,我只是不知道如何計算它的一個三角形:

btnMove.addListener(new InputListener() 
    { 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) 
     { 
      //this basically only cuts the image in half... I was thinking of cutting more from there 
      //but I'm really not sure how to cut it exactly because of the triangle 
      if(y > 38 && x > 22) 
      { 
       player.playerJump(); 
       return true; 
      } 
      else if(y < 38 && x < 22) 
      { 
       player.playerDodge; 
       return true; 
      } 

      return false; 
     } 
    }); 

我曾嘗試搜索互聯網,但我真的上找不到太多,所以我會很感激我可以實現的任何想法。順便說一句,我幾乎忘了提及我在libGdx中使用scene2d(如果它不清楚)。

感謝您花時間閱讀本文,我知道可能有太多文字,我只是不太擅於解釋我的問題。

+0

一個按鈕的「整個圖像」聽起來像是正確的方法。你能分享一些你想出來的代碼嗎? (即,您使用該按鈕註冊的聽衆)。從一個按鈕的觸摸,你應該能夠計算它登陸在哪個季度。 –

+0

好的,我會添加它,但我的問題是我不知道如何計算一個好方法,我知道如何獲得x和y,我能夠使用它們,但我不知道如何限制每個按鈕,因爲它是一個三角形,所以我想也許我應該循環獲取邊界或其他東西,但仍然不確定... –

回答

2

您的按鈕圖像被有效地分爲四個象限。爲了計算給定點x, y所在的四個象限中的哪一個,我認爲你只需要確定每個對角線的哪一邊。一個對角線由x == y(這是從左下角到右上角的對角線)定義。由於該圖像左下角的原點,從左上到下的對角線由x == (WIDTH - y)定義。現在你只需要找出你在每個對角線的一面:

boolean belowUpRight = (x > y); 
boolean belowDownRight = (x < (WIDTH - y)); 

現在,你可以通過類似計算你四個按鈕:

boolean touchLeft = !belowUpRight && belowDownRight; 
boolean touchDown = belowUpRight && belowDownRight; 
// etc .. 

至少,在理論上我覺得這個作品。我沒有真正嘗試過。

+0

這是一個可以接受的解決方案,如果有其他人在此過程中摔倒,我還會發現更好的解決方案。在libgdx中有一個可以使用的觸摸板實現,您只需將旋鈕設置爲空圖像即可。 –

+0

嘿,好點。更多詳細信息,請訪問:http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/ui/Touchpad.html –