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