2015-06-13 5 views
1

У меня проблема с масштабированием изображений, у каждого устройства есть разное разрешение экрана, и я не могу понять, как они масштабируются в платформе Libgdx, , например, сегодня я сделал небольшую игру для андроид и проблема, что я облицовка .. enter image description hereРазмер Libgdx Texture Android

offcurse мы можем масштабировать их вниз, но это не правильный путь, потому что если кто-то есть таблетка Butttons будет соответствовать совершенной, и в libgdx, насколько я знаю, что я не могу использовать макеты sw600dp, большие, xlarge и т. д. ... как мы можем масштабировать их в зависимости от ширины и высоты экрана.

stage = new Stage(); 
    Gdx.input.setInputProcessor(stage); 
    font = new BitmapFont(); 
    skin = new Skin(); 
    buttonAtlas = new TextureAtlas(Gdx.files.internal("data/Spritesheetbuttons.pack")); 
    skin.addRegions(buttonAtlas); 
    Table table = new Table(); 
    table.setBounds(0,0,buttonAtlas.getRegions().get(0).getRegionWidth()*2 , buttonAtlas.getRegions().get(0).getRegionHeight()); 

    textButtonStyle = new TextButtonStyle(); 
    textButtonStyle.font = font; 
    textButtonStyle.up = skin.getDrawable("left"); 
    textButtonStyle.down = skin.getDrawable("left"); 
    textButtonStyle.checked = skin.getDrawable("left"); 
    buttonLeft = new TextButton("Button1", textButtonStyle); 
    table.add(buttonLeft); 

    textButtonStyle = new TextButtonStyle(); 
    textButtonStyle.font = font; 
    textButtonStyle.up = skin.getDrawable("right"); 
    textButtonStyle.down = skin.getDrawable("right"); 
    textButtonStyle.checked = skin.getDrawable("right"); 
    buttonRight = new TextButton("Button1", textButtonStyle); 
    table.add(buttonRight); 
    stage.addActor(table); 



    table = new Table(); 
    table.setBounds(Game.SCREEN_WIDTH-buttonAtlas.getRegions().get(0).getRegionWidth(),0,buttonAtlas.getRegions().get(0).getRegionWidth() , buttonAtlas.getRegions().get(0).getRegionHeight()*2); 

    textButtonStyle = new TextButtonStyle(); 
    textButtonStyle.font = font; 
    textButtonStyle.up = skin.getDrawable("up"); 
    textButtonStyle.down = skin.getDrawable("up"); 
    textButtonStyle.checked = skin.getDrawable("up"); 
    buttonUp = new TextButton("Button1", textButtonStyle); 
    table.add(buttonUp); 
    table.row(); 

    textButtonStyle = new TextButtonStyle(); 
    textButtonStyle.font = font; 
    textButtonStyle.up = skin.getDrawable("down"); 
    textButtonStyle.down = skin.getDrawable("down"); 
    textButtonStyle.checked = skin.getDrawable("down"); 
    buttonDown = new TextButton("Button1", textButtonStyle); 
    table.add(buttonDown); 
    stage.addActor(table); 


    buttonRight.addListener(new EventListener() { 

     @Override 
     public boolean handle(Event event) { 

     } 
    }); 
    buttonLeft.addListener(new EventListener() { 

     @Override 
     public boolean handle(Event event) { 

     } 
    }); 
    buttonDown.addListener(new EventListener() { 

    @Override 
    public boolean handle(Event event) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    }); 
    buttonUp.addListener(new EventListener() { 

    @Override 
    public boolean handle(Event event) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    }); 

ответ

3

Похоже, вы полагаетесь на размер активов и используете мнимые единицы пикселя. Посмотрите на this post, почему вы не должны этого делать. Вместо этого вы можете использовать a viewport с более значимыми единицами. Например. вы можете использовать фактический размер экрана (например, в дюймах или сантиметрах) для своего окна просмотра, а затем указать размер кнопки (снова в дюймах или сантиметрах), которую вы хотите, чтобы они были. Вам также может понадобиться/нужно позвонить Drawable#setMinWidth(), в зависимости от вашей кожи.

float widthInches = (float)Gdx.graphics.getWidth() * Gdx.graphics.getPpiX(); 
float heightInches = (float)Gdx.graphics.getHeight() * Gdx.graphics.getPpiY(); 
stage = new Stage(new StretchViewport(widthInches, heightInches)); 
... 
// e.g. if you want your buttons to be 1 by 1 inch 
button.setSize(1f, 1f); 
button.getStyle().up.setMinWidth(1f); 
button.getStyle().up.setMinHeight(1f); 
... etc. for the other drawables your button uses 
+0

Thnks за Ваш ответ это было очень полезно, но у меня есть один problem..i имеет ширину экрана, высоту 100 метров и VIEWPORT_WIDTH, VIEWPORT_HEIGHT 30 метра и я не хочу, независимо от того, что устройство размера экрана, чтобы позволить пользователь видит только то, что конкретное окно просмотра не больше не меньше .. пока мы хорошо, но после масштаба все OrthogonalTiledMapRenderer будет деформироваться. –

+0

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

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