2016-05-25 3 views
1

У меня есть следующий простой класс с одним шаром и четырьмя стенами вокруг экрана:libGDX орфографической размер вид камеры (с Box2D)

SpriteBatch batch; 
Box2DDebugRenderer debugRenderer; 
World world; 
OrthographicCamera camera; 

public float VIRTUAL_WIDTH = 720f; 
public float VIRTUAL_HEIGHT = 1280f; 

@Override 
public void create() { 

    batch = new SpriteBatch(); 

    camera = new OrthographicCamera(VIRTUAL_WIDTH, VIRTUAL_HEIGHT); 
    world = new World(new Vector2(0, -9), true); 

    debugRenderer = new Box2DDebugRenderer(); 

    BodyDef bodyDef = new BodyDef(); 
    bodyDef.type = BodyDef.BodyType.DynamicBody; 

    CircleShape circleShape = new CircleShape(); 
    circleShape.setRadius(50); 

    FixtureDef fixtureDef = new FixtureDef(); 
    fixtureDef.shape = circleShape; 
    fixtureDef.restitution = 1; 

    Body body = world.createBody(bodyDef); 
    body.createFixture(fixtureDef); 

    createWall(0f, -VIRTUAL_HEIGHT/2, VIRTUAL_WIDTH/2, 30f); 
    createWall(0f, VIRTUAL_HEIGHT/2, VIRTUAL_WIDTH/2, 30f); 
    createWall(-VIRTUAL_WIDTH/2, 0f, 30f, VIRTUAL_HEIGHT/2); 
    createWall(VIRTUAL_WIDTH/2, 0f, 30f, VIRTUAL_HEIGHT/2); 

} 

private void createWall(float x, float y, float hx, float hy){ 

    BodyDef bodyDef = new BodyDef(); 
    bodyDef.type = BodyDef.BodyType.StaticBody; 
    bodyDef.position.set(x, y); 

    PolygonShape polygonShape = new PolygonShape(); 
    polygonShape.setAsBox(hx, hy); 

    FixtureDef fixtureDef = new FixtureDef(); 
    fixtureDef.shape = polygonShape; 

    world.createBody(bodyDef).createFixture(fixtureDef); 

} 

@Override 
public void render() { 

    camera.update(); 

    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    world.step(1/60.0f, 8, 3); 
    batch.setProjectionMatrix(camera.combined); 

    batch.begin(); 
    debugRenderer.render(world, camera.combined); 
    batch.end(); 

} 

И это сделать следующий экран на моем устройстве (возможно, не идеальный скриншот):

enter image description here

Экран слегка сдвинут влево, это потому, что ошибки округления?

UPDATE:

enter image description here

+0

что ваши устройства размер экрана? –

+0

Возможно, вы захотите прочитать следующее: http://blog.xoppa.com/pixels. – Xoppa

ответ

0

Вместо этого

public float VIRTUAL_WIDTH = 720f; 
public float VIRTUAL_HEIGHT = 1280f; 

Попробуйте

public float VIRTUAL_WIDTH = Gdx.graphics.getWidth(); 
public float VIRTUAL_HEIGHT = Gdx.graphics.getHeight(); 
+0

Попробуйте это, выглядит лучше, но теперь я не могу видеть верхнюю стену – mkoval

+0

вы можете разместить снимок экрана –

+0

добавить скриншот к моему вопросу (раздел UPDATE) – mkoval

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