При попытке запрограммировать игру с помощью Box2D у меня возникла проблема с Box2D. Я заполнил номера пикселей для длин текстур и спрайтов, чтобы создать вокруг него прямоугольник. Все было в нужном месте, но почему-то все шло очень медленно. Посмотрев в Интернете, я обнаружил, что если вы не конвертировали пиксели в метры, box2d мог бы обрабатывать фигуры как очень большие объекты. это казалось логичной причиной всего, что двигалось медленно.Libgdx Box2D для преобразования пикселов в метры?
Я нашел похожие вопросы на этом сайте, но ответы действительно не помогли. в большинстве случаев решение заключалось в том, чтобы сделать методы для преобразования чисел пикселей в счетчики с использованием коэффициента масштабирования. Я попробовал это, но все стало неуместным и имело неправильные размеры. это казалось логичным для меня, поскольку числа, которые изменились, но имели тот же смысл.
Мне было интересно, есть ли способ сделать пиксели меньше метров, поэтому все, что должно быть в одном месте с тем же (пиксельным) размером, но означает меньше метров. Если у вас есть другой путь, который вы думаете, может помочь, я whould также хотел бы услышать ..
Вот код, я использую для создания камеры перед
width = Gdx.graphics.getWidth()/5;
height = Gdx.graphics.getHeight()/5;
camera = new OrthographicCamera(width, height);
camera.setToOrtho(false, 1628, 440);
camera.update();
Это метод я использую для создать объект:
public void Create(float X, float Y, float Width, float Height, float density, float friction, float restitution, World world){
//Method to create an item
width = Width;
height = Height;
polygonDef = new BodyDef();
polygonDef.type = BodyType.DynamicBody;
polygonDef.position.set(X + (Width/2f), Y + (Height/2f));
polygonBody = world.createBody(polygonDef);
polygonShape = new PolygonShape();
polygonShape.setAsBox(Width/2f, Height/2f);
polygonFixture = new FixtureDef();
polygonFixture.shape = polygonShape;
polygonFixture.density = density;
polygonFixture.friction = friction;
polygonFixture.restitution = restitution;
polygonBody.createFixture(polygonFixture);
}
Чтобы создать элемент, в данном случае таблицы, я использую следующее:
Table = new Item();
Table.Create(372f, 60f, 152f, 96f, 1.0f, 0.2f, 0.2f, world);
спрайтов нарисованы по этому пункту, используя следующий метод:
public void drawSprite(Sprite sprite){
polygonBody.setUserData(sprite);
Utils.batch.begin();
if(polygonBody.getUserData() instanceof Sprite){
Sprite Sprite = (Sprite) polygonBody.getUserData();
Sprite.setPosition(polygonBody.getPosition().x - Sprite.getWidth()/2, polygonBody.getPosition().y - Sprite.getHeight()/2);
Sprite.setRotation(polygonBody.getAngle() * MathUtils.radiansToDegrees);
Sprite.draw(Utils.batch);
}
Utils.batch.end();
}
Спрайты также имеют размеры в пикселях.
Используя эти методы, он отображает изображения в нужных местах, но все движется медленно. Мне было интересно, как или если мне нужно изменить это, чтобы объекты двигались правильно и/или меньше. Заранее спасибо.
Спасибо, поэтому, если я захочу сделать это, как мне нужно отображать пиксели на другое количество метров, как мне это сделать? (Я включил кодирование, используемое для создания элемента, и нарисовал спрайт на нем в вопросе). – dragonfly
отредактировал мой ответ. – sinu
Спасибо, я уже нашел способ сделать его правильным, но мне пришлось преобразовать расположение спрайтов на весь экран, чтобы все выглядело в нужном месте, но фактическое симуляция была в нижнем левый угол. Это, кажется, лучшая идея, хотя – dragonfly