Я пытаюсь избавиться от необходимости масштабировать все координаты на моих спрайтах при использовании Box2D и LibGDX.Почему простое масштабирование в LibGDX и Box2D работает правильно?
Вот настройки для моего окна просмотра и физики мира:
// Used to create an Extend Viewport
public static final int MIN_WIDTH = 480;
public static final int MIN_HEIGHT = 800;
// Used to scale all sprite's coordinates
public static final float PIXELS_TO_METERS = 100f;
// Used with physics world.
public static final float GRAVITY = -9.8f;
public static final float IMPULSE = 0.15f;
world.setGravity(new Vector2(0f, GRAVITY));
Когда я применить линейный импульс к моему характеру (когда пользователь нажимает на экран) все работает отлично:
body.setLinearVelocity(0f, 0f);
body.applyLinearImpulse(0, IMPULSE, body.getPosition().x, body.getPosition().y, true);
Тело имеет плотность 0f
, но изменение этого параметра до 1f
или даже 100f
не имеет никакого реального эффекта.
Это означает, что я должен масштабировать все места спрайтов в методе рисования на PIXELS_TO_METERS
. Я подумал (возможно, неправильно), что могу просто масштабировать GRAVITY
и IMPULSE
на PIXELS_TO_METERS
и заставить его работать точно так же. Кажется, это не так. Гравитация кажется очень маленькой, и применение импульса почти не имеет никакого эффекта.
// Used to scale all sprite's coordinates
public static final float PIXELS_TO_METERS = 1f;
// Used with physics world.
public static final float GRAVITY = -9.8f * 100;
public static final float IMPULSE = 0.15f * 100;
Итак:
1) почему не просто расширения все значения заставить его работать так же?
2) Есть ли лучший способ сделать это?
Благодарим вас за разъяснение, но это все еще не имеет для меня никакого смысла. В моей попытке просто умножить все значения мира физики на 100, не в основном ли я говорю, что 1 пиксель = 1 метр? Итак, мой 'MIN_WIDTH = 480f // метров' и мой' MIN_HEIGHT = 800f // метров'. Установка моего параметра «GRAVITY = -980f» должна быть установлена на «-980 метров в секунду в секунду»? Это мое понимание этого. В любом случае - вы по существу взяли мои «MIN_WIDTH» и «MIN_HEIGHT» и разделили их на 100. Таким образом, если я установил свои «PIXELS_TO_METERS» в 1, то это должно быть по сути одно и то же, но это не так. !Работа. – Townsfolk
Извините, закончилось пространство. Установка моего масштаба на 1 (практически удаление шкалы) нарушает его. Все очень неровно. Я предполагаю, что мне нужно установить конфигурацию в 100 x этих значений на моем рабочем столе и в Android Launcher, правильно? Ужасно жаль, я знаю, что здесь что-то не хватает, не могли бы вы добавить некоторые биты кода о том, как использовать эти новые значения? Я, очевидно, не использую их правильно. – Townsfolk
Попытайтесь не думать в своих воображаемых пикселях (например, когда вы сравниваете свои воображаемые пиксели с метрами (вы говорите «1 пиксель = 1 метр»), вы просто слишком усложняете вещи). Для каких значений вам нужно больше разъяснений? Вы не указали достаточно подробных сведений о том, как вы используете значения в своем вопросе, чтобы показывать фактические изменения в вашем коде. Если вы столкнулись с проблемой (пикселированной?), Тогда подумайте о предоставлении достаточной информации, необходимой для решения этой проблемы. В любой пусковой установке нет конфигурации, которая должна быть настроена на использование значимых единиц вместо ваших воображаемых пикселей. – Xoppa