Обработка 3 скоростей Box2D без масштабирования с разрешением - PullRequest
1 голос
/ 11 марта 2020

Я сейчас пытаюсь сделать мою простую игру масштабируемой с разрешением. Я заметил, что когда я меняю разрешение, не все получается. Например, от сдвига с 1280x720 до 1920x1080 расстояние прыжка изменяется незначительно. Основная проблема, которую я заметил, заключается в том, что когда я стреляю снарядом со скоростью. При более низких разрешениях он, кажется, перемещается по экрану значительно быстрее, и я не могу понять, почему, поскольку он должен уменьшаться с размером окна. Вот фрагмент кода, который запускает снаряд:

m = new Box(l.pos.x+Width/32*direction2, l.pos.y-Height/288, Width/64, Height/72, true, 4);
              m.body.setGravityScale(0f);
              boxes.add(m);
              m.body.setLinearVelocity(new Vec2(Width*direction2, 0));

В этом сценарии я создаю поле. В новом боксе (координата спавна x, координата спавна y, ширина ящика, высота ящика, перемещаемый ящик, тип ящика) l.pos.x и l.pos.y - это позиции, из которых я запускаю ящик , Переменные Height и Width - это размер текущего окна в пикселях, обновляемых в void draw (), direction2 - либо 1, либо -1 в зависимости от направления, в котором находится персонаж.

1 Ответ

0 голосов
/ 16 апреля 2020

Трудно сказать, как остальная часть кода влияет на симуляцию, не видя ее больше.

В идеале вы хотели бы сохранить связанные с физикой свойства независимыми от измерений эскиза Обработки с точки зрения измерений, но сохранить пропорцию, чтобы вы может просто увеличить масштаб рендеринга мира такого же размера. Если у вас есть взаимодействие с мышью, координаты также масштабируются, но кроме позиции, остальные физические свойства должны сохраняться.

Из того, что я могу собрать в вашем коде, если Width - это набросок width Вы должны отделить это от линейной скорости:

m.body.setLinearVelocity(new Vec2(Width*direction2, 0));

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...