2014-09-30 63 views
2

我剛剛開始使用LibGDX和Box2d開發我的新Android遊戲。 我現在有一個船類,其中包含對船體和附屬於該船的引擎陣列的引用。 爲了調試目的,我想提請發動機的位置和他們的部隊向量峯(爲一個紅色方塊) 首先我想這個代碼LibGDX Box2d getWorldPoint問題

public void draw(Batch batch, float parentAlpha) 
{ 
    for(AttachedEngine e : Engines) 
    { 
      Vector2 globalPosition = body.getWorldPoint(e.localPosition); 
      Vector2 globalPower = body.getWorldPoint(e.localForce); 
      batch.draw(img, Gdx.graphics.getWidth()/2 + globalPosition.x, Gdx.graphics.getHeight()/2 + globalPosition.y, 5, 5); 
      batch.draw(img, Gdx.graphics.getWidth()/2 + globalPower.x, Gdx.graphics.getHeight()/2 + globalPower.y, 5, 5); 
    } 
} 

但它會導致我在廣場錯誤的地方是(不工作) 然後我試圖將此代碼

public void draw(Batch batch, float parentAlpha) 
{ 
    for(AttachedEngine e : Engines) 
    { 
      batch.draw(img, Gdx.graphics.getWidth()/2 + body.getWorldPoint(e.localPosition).x, Gdx.graphics.getHeight()/2 + body.getWorldPoint(e.localPosition).y, 5, 5); 
      batch.draw(img, Gdx.graphics.getWidth()/2 + body.getWorldPoint(e.localForce).x, Gdx.graphics.getHeight()/2 + body.getWorldPoint(e.localForce).y, 5, 5); 
    } 
} 

和它的工作。 你們可以解釋一下爲什麼這些代碼有所不同? 第一種解決方案對我來說更自然,但我不知道它爲什麼不起作用。 答案顯然是微不足道的,但我太困惑了。 這是因爲幾年編程的,我其實真的不知道發生了什麼事情在第一時間,我找不到計算器解決方案,所以我要問你們

編輯

它工作在這樣:

public void draw(Batch batch, float parentAlpha) 
{ 
    for(AttachedEngine e : Engines) 
    { 
      Vector2 globalPosition = body.getWorldPoint(e.localPosition); 
      batch.draw(img, Gdx.graphics.getWidth()/2 + globalPosition.x, Gdx.graphics.getHeight()/2 + globalPosition.y, 5, 5); 
      Vector2 globalPower = body.getWorldPoint(e.localForce); 
      batch.draw(img, Gdx.graphics.getWidth()/2 + globalPower.x, Gdx.graphics.getHeight()/2 + globalPower.y, 5, 5); 
    } 
} 

還我發現,當我初始化globalPower只是globalPostion後(如在代碼的第一部分)這樣

  Vector2 globalPosition = body.getWorldPoint(e.localPosition); 
      Vector2 globalPower = body.getWorldPoint(e.localForce); 

兩個vect2都包含全局座標(它們是相同的),所以我必須在它們之間插入draw。

回答

0

我檢查過了,兩個代碼片段之間的唯一區別是globalPositionglobalPower在第一個片段中被提前拉出。

正如我所看到的那樣,這隻會給您帶來一些可能性。

  1. 通過時間draw被調用時,在e.localPosition和/或e.localForce的值已經改變。 我的的唯一方法可能會看到這是一種可能性,如果您使用的庫是多線程的。我不熟悉box2dlibgdx,所以我不能說這個問題。

  2. 您對應用程序的其他部分進行了更改,但您未在此處複製/粘貼導致發生故障。

真的,據我所知,這些是唯一的選擇。