2014-03-29 33 views
0

基本上我正在使用LibGdx製作一個遊戲,其中涉及到一個球和地面。目標是儘可能長時間地將球保持在空中。如何在LibGdx中改變觸摸形狀的位置

到目前爲止,我只使用box2d,而不是將任何精靈放在形狀上。但我似乎無法使觸摸正常工作。

下面是我在關於這一功能至今:

這是設置爲我只想用着陸方法,它擴展了輸入處理器的類。

Gdx.input.setInputProcessor(new InputController(){ 
     @Override 
     public boolean touchDown(int screenX, int screenY, int pointer, int button){ 
      if((screenX == ball.getPosition().x) && (screenY == ball.getPosition().y)){ 
       movement.y = speed;     
      } 
      return true;     
     } 

    }); 

球是設置爲球形的世界的身體。速度是一個浮點變量。然後,我有

ball.applyForceToCenter(movement, true); 

在渲染方法運動是未直到觸摸它應該由500

誰能幫助,因爲這沒有工作增加y位置定義一個矢量2: (

+0

InputController是您自己的自定義類嗎?它似乎沒有在API中的任何地方。 – kabb

+0

是的,這只是擴展了InputProcessor類,所以我可以重寫touchDown方法而不用其他所有東西。 – Saml92

回答

1

你的第一個問題是,你正在測試,看看是否點擊了點正是的球的位置,這是極不可能的,而且幾乎可以肯定不是你想要什麼,而是你想測試看看點擊的點是否在球的任何位置點擊。

您的第二個問題是您需要將設備座標轉換爲box2d座標。設備和box2d使用不同的座標系,所以比較兩者是沒有意義的。

要解決第一個問題,您可以遍歷主體中的所有燈具,並使用方法fixture.testPoint(x, y)來查看點是否碰到燈具。由於您的身體只有一個燈具,您可以使用此代碼進行測試:

body.getFixtureList().get(0).testPoint(x, y); 

解決第二個問題有點棘手。理想情況下,您的遊戲應該使用相機來處理渲染。如果沒有,你應該得到一個。隨着攝像頭,可以unproject設備座標拿到相機的座標是這樣的:

Vector3 mouseCoords = new Vector3(screenX, screenY, 0); 
camera.unproject(mouseCoords); 
//mouseCoords.x and mouseCoords.y will now be relative to the camera 

然後,你必須轉換爲Box2D的座標:

mouseCoords.scl(WORLD_TO_BOX); 

其中WORLD_TO_BOX是該比例從世界座標框座標,你應該已經設置好了。然後,您可以在testPoint方法中使用mouseCoords.x和mouseCoords.y。

編輯:下面的代碼顯示如何循環通過身體中的所有燈具。但是,如果您只有一個燈具,則不需要。

for(Fixture fixture : body.getFixtureList()) 
{ 
    //Do something to fixture 
} 
+0

我將如何去循環夾具?我對這一切都很陌生 – Saml92

+0

@ Saml92在帖子末尾添加了代碼,以展示如何循環體內所有燈具 – kabb

+0

感謝它的工作! – Saml92