2014-09-20 2 views
1

Мой код полностью работоспособен, если я вынимаю экранное изменение размера. Но теперь я пробовал несколько устройств, включая планшет, и разрешение очень плохое. Поэтому я пытаюсь сохранить одинаковое соотношение сторон с помощью видового экрана. Я использую сцену, чтобы добавить свои кнопки и изображения. Мой кликлайнер отвечает на часть в желобе, а часть - на кнопку воспроизведения. Stackoverflow не позволяет мне размещать изображение из-за новой учетной записи. Может ли кто-нибудь помочь мне понять, что я делаю неправильно, и убедиться, что этот кусок кода работает на телефонах и на рабочем столе.Libgdx: Clicklistener не работает с изменением размера

private static final int VIRTUAL_WIDTH = 480; 
private static final int VIRTUAL_HEIGHT = 800; 

public void resize(int width, int height) { 
    // calculate new viewport 

    Vector2 size = Scaling.fit.apply(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, width, height); 
    int viewportX = (int)(width - size.x)/2; 
    int viewportY = (int)(height - size.y)/2; 
    int viewportWidth = (int)size.x; 
    int viewportHeight = (int)size.y; 

    Gdx.gl.glViewport(viewportX, viewportY, viewportWidth, viewportHeight); 
} 

@Override 
public void show() { 

    batch = new SpriteBatch(); 
    stage = new Stage(); 
    camera = new OrthographicCamera(VIRTUAL_WIDTH, VIRTUAL_HEIGHT); 

    camera.setToOrtho(true, VIRTUAL_WIDTH, VIRTUAL_HEIGHT); 

    worldCoords = new Vector3(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, 0); 
    camera.unproject(worldCoords); 
    camera.update(); 


    white = new BitmapFont(Gdx.files.internal("font/white.fnt"), true); 
    white.setScale(1f, -1f); 

    skin = new Skin(); 
    atlas = new TextureAtlas("button.pack.pack"); 
    skin.addRegions(atlas); 
    buttonStyle = new TextButtonStyle(); 
    buttonStyle.up = skin.getDrawable("button"); 
    buttonStyle.down = skin.getDrawable("buttonpressed"); 
    buttonStyle.font = white; 
    buttonStyle.fontColor = Color.BLACK; 




    buttonPlay =new TextButton("Play", buttonStyle); 
    buttonPlay.setWidth(VIRTUAL_WIDTH/3); 
    buttonPlay.setHeight(VIRTUAL_HEIGHT/12); 

    buttonPlay.setPosition(stage.getViewport().getRightGutterWidth(), stage.getViewport().getWorldHeight()/2); 


    buttonPlay.addListener(new ClickListener(){ 

     @Override 
     public void clicked(InputEvent event, float x, float y){ 

      ((Game) Gdx.app.getApplicationListener()).setScreen(new MainFlow(g)); 

     } 
    }); 

    Gdx.input.setInputProcessor(stage); 


    Image img = new Image(new Texture(Gdx.files.internal("Optimized-BG_2.png"))); 
    img.setFillParent(true); 


    stage.addActor(img); 
    stage.addActor(buttonPlay); 


} 

@Override 
public void render(float delta) { 

    camera.update(); 
    batch.setProjectionMatrix(camera.combined); 

    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    stage.act(); 
    stage.draw(); 

} 
+0

класс Viewport делает все, что вы хотите. https://github.com/libgdx/libgdx/wiki/Viewports –

ответ

2

Я не понимаю, именно то, что вы хотите, но при первой попытке обновить сцену, в методе изменения размера, и читать libgdx docs

stage.getViewport().update(width, height, true); 
Смежные вопросы