2015-12-01 3 views
2

У меня проблема с Box2D. Я делаю простую 2D-игру, когда игрок стреляет в врагов. Я читал, что 1 единство в Box2D эквивалентно 1 метру, поэтому я должен использовать небольшие размеры. Я установил мировые размеры до 160x90, но вот проблемы:Проблема с Libgdx box2d с размерами и масштабированием камеры

Используя небольшие размеры, мне пришлось увеличить мою камеру, установленную на 1280x720, но, как вы видите, есть большая капля качества в фигурах, а также движения тела больше не течет. И максимальная скорость все еще слишком медленная, даже если мир достигнет 1/300!

Vsinc включен, масштабирование установлено на 0.125, а квадраты, которые вы видите, составляют 10 единиц на сторону.

http://imgur.com/oGYvuNv

Вот код камеры

OrthographicCamera camera = new OrthographicCamera(64,32); 

Вот код класса, нарисовать круг

public class JoyCircle implements GraphicalComponent { 
public int radius; 
public Vector2 position; 
ShapeRenderer renderer; 
Color color; 
OrthographicCamera c; 

public JoyCircle(int radius,Vector2 position,OrthographicCamera c,Color color) { 
    this.c = c; 
    this.color = color; 
    this.radius = radius; 
    this.position = position; 
    renderer = new ShapeRenderer(); 
    renderer.setProjectionMatrix(c.combined); 
} 

@Override 
public void update() { 

} 

@Override 
public void draw() { 
    renderer.begin(ShapeType.Filled); 
    renderer.setColor(color); 
    renderer.circle(position.x, position.y, radius); 
    renderer.end(); 
} 

} 

Here is the code of the world draw 
public void draw() { 
    motionJoystick.draw(); //draws 2 instances of JoyCircle 
    renderer.render(world, camera.combined); 
} 
+0

Интересно, если ваша проблема была решена, если да, то не могли бы вы превратить ваш вопрос решен, выбирая правильный ответ, спасибо – Netero

ответ

0

вы не должны использовать зум обращайтесь с этим здесь, что я делаю, и он очень хорошо работает для меня

camera = new OrthographicCamera(SCREEN_WIDTH/PPM, Config.SCREEN_HEIGHT/PPM); 

// fix camera to the center of the screen 
camera.position.set(Config.SCREEN_WIDTH/PPM/2f, Config.SCREEN_HEIGHT/PPM/2f, 0); 

camera.update(); 

я поставил блок преобразования (PPM) до 100

надеюсь, что это было полезно

Успехов

+0

я попробовал, но круг оказываемых с ShapeRendered продолжает быть похожим на изображение .. –

+0

И больше я увеличиваю блок PPM, чем больше движений угловых –

+0

вы положили проекцию камеры в сочетании с вашим debugRender следующим образом: debugRendrer.render (world, camera.combined); вам нужно добавить больше кода, чтобы мы могли видеть, как вы создаете тело и как вы устанавливаете параметры – Netero

2

Не использовать PPM, я знаю, что вы, возможно, видели много обучающих программ с использованием РРМ но вместо этого используют виртуальные пиксели или пиксель картофеля для камеры и box2d. Здесь читайте этот замечательный article и этот answer. Например:

OrthographicCamera camera = new OrthographicCamera(20, 11); 

Здесь 20 любое произвольное число для WIDTH и HEIGHT должно быть на самом деле WIDTH*Gdx.graphics.getHeight()/Gdx.graphics.getWidth(). Вам не нужно устанавливать уровень масштабирования, оставьте его по умолчанию.

+0

Спасибо, но я до сих пор не понимаю, как соединить это с Box2D, потому что даже если я не увеличиваю масштаб, если размер экрана больше, чем размер камеры, то мешают прикосновения, а также фишики игры. –

+0

Забудьте о фактическом размере пикселя экрана в секунду и просто предположите, что ваш экран состоит из этих виртуальных точек. Теперь создайте свою логику игры на основе этих точек, скажем, если вы хотите, чтобы ваш объект двигался с линейной скоростью, поставьте его на 0,6f или 1,5f (виртуальные точки) вместо 30 или 40 (пиксельные точки).А для кодов сенсорного экрана вы можете использовать метод 'camera.unproject()' для получения фактических экранных координат всякий раз, когда захотите. – Kush

+0

Например: \t public void render() { \t \t Gdx.gl.glClearColor (1, 0, 0, 1); \t \t Gdx.gl.glClear (GL20.GL_COLOR_BUFFER_BIT); \t \t OrthographicCamera c = new OrthographicCamera (64,32); \t \t ShapeRenderer render = new ShapeRenderer(); \t \t render.begin (ShapeType.Filled); \t \t render.setProjectionMatrix (c.combined); \t \t render.circle (5, 5, 10); \t \t render.end(); \t} Результатом этого является http://imgur.com/8iCOq1a –

Смежные вопросы