2014-09-30 5 views
2

Я только начал разрабатывать свою новую игру для Android, используя LibGDX и Box2d. У меня есть класс корабля, в котором в данный момент содержится ссылка на тело корабля и массив двигателей, прикрепленных к кораблю. Для отладки цели я хотел бы обратить позиции двигателей и их силы пиков векторов (как красные квадраты) первым я попробовал этот кодLibGDX Box2d getWorldPoint issue

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); 
    } 
} 

, и она работала. Можете ли вы, ребята, объяснить мне, почему эти коды меняются? Первое решение для меня более естественное, но я не знаю, почему он не работает. Ответ может быть тривиальным, но я слишком смущен. Это первый раз, так как несколько лет программирования, что я на самом деле действительно не знаю, что происходит, и я не могу найти решение на StackOverflow, так что я должен спросить вас, ребята

EDIT

It работает таким образом:

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 содержат глобальные координаты мощности (они одинаковы), поэтому я должен вставить ничью между ними.

ответ

0

Я проверил, и единственное различие между двумя фрагментами кода заключается в том, что в первом фрагменте вытаскиваются заранее и globalPower.

Как я вижу, это оставляет вам только несколько возможностей.

  1. К тому времени draw называется, значение в e.localPosition и/или e.localForce изменилось. Единственный способ, который можно использовать, заключается в том, что библиотеки, которые вы используете, являются многопоточными. Я не знаком с box2d или libgdx, поэтому я не могу говорить на этот счет.

  2. Вы внесли изменения в другие части приложения, которые вы не копировали/вставляли здесь, которые вызывают сбои.

Действительно, насколько я вижу, это единственные варианты.