2016-09-26 67 views
1

我正在開發一個簡單的遊戲並面臨一個問題。我的虛擬屏幕尺寸爲640x360,但如果我在設備上啓動我的遊戲(例如1920x1080屏幕分辨率),演員的視角會保留在我的虛擬世界座標中,但不是1920x1080,因此我無法檢測到任何輸入。誰能幫我?LibGdx演員綁定不正確

private Stage stage; 

private Preferences SoundPrefs; 

private Texture TitleTexture, PlayTexture, BallsTexture, RatingsTexture, ShopTexture, NoadsTexture, SoundOnTexture, SoundOffTexture; 

private MenuTextureActor Title, Play, Balls, Ratings, Shop, Noads, Sound; 

public MenuScreen(MainGame gam) { 
    super(gam); 
    stage = new Stage(new FitViewport(640, 360)); 
    SoundPrefs = Gdx.app.getPreferences("Sound"); 
    Gdx.input.setInputProcessor(new InputProcessor() { 
     @Override 
     public boolean keyDown(int keycode) { 
      return false; 
     } 

     @Override 
     public boolean keyUp(int keycode) { 
      return false; 
     } 

     @Override 
     public boolean keyTyped(char character) { 
      return false; 
     } 

     @Override 
     public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
      if (screenX >= Play.getX() && screenY >= Play.getY() && screenX <= (Play.getX() + Play.getWidth()) 
        && screenY <= (Play.getY() + Play.getHeight())) { 
       try { 
        Thread.sleep(200); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       game.setScreen(new PlayScreen(game)); 
      } 
      if (screenX >= Sound.getX() && screenY >= Sound.getY() && screenX <= (Sound.getX() + Sound.getWidth()) 
        && screenY <= (Sound.getY() + Sound.getHeight())){ 
       if (SoundPrefs.getBoolean("Sound", true) == true){ 
        SoundPrefs.putBoolean("Sound", false); 
        Sound.ChangeTexture(SoundOffTexture); 
       } else if (SoundPrefs.getBoolean("Sound", true) == false) { 
        SoundPrefs.putBoolean("Sound", true); 
        Sound.ChangeTexture(SoundOnTexture); 
       } 
       SoundPrefs.flush(); 
      } 
      return false; 
     } 

     @Override 
     public boolean touchUp(int screenX, int screenY, int pointer, int button) { 
      return false; 
     } 

     @Override 
     public boolean touchDragged(int screenX, int screenY, int pointer) { 
      return false; 
     } 

     @Override 
     public boolean mouseMoved(int screenX, int screenY) { 
      return false; 
     } 

     @Override 
     public boolean scrolled(int amount) { 
      return false; 
     } 
    }); 
} 

@Override 
public void show() { 
    TitleTexture = game.getManager().get("title.png"); 
    TitleTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); 
    PlayTexture = game.getManager().get("play.png"); 
    PlayTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); 
    BallsTexture = game.getManager().get("balls.png"); 
    BallsTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); 
    RatingsTexture = game.getManager().get("ratings.png"); 
    RatingsTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); 
    ShopTexture = game.getManager().get("shop.png"); 
    ShopTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); 
    NoadsTexture = game.getManager().get("noads.png"); 
    NoadsTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); 
    SoundOnTexture = game.getManager().get("sound_on.png"); 
    SoundOnTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); 
    SoundOffTexture = game.getManager().get("sound_off.png"); 
    SoundOffTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); 
    Title = new MenuTextureActor(TitleTexture, 170, 270, 300, 70); 
    Play = new MenuTextureActor(PlayTexture, 255, 150, 130, 120); 
    Balls = new MenuTextureActor(BallsTexture, 105, 40, 70, 70); 
    Ratings = new MenuTextureActor(RatingsTexture, 195, 40, 70, 70); 
    Shop = new MenuTextureActor(ShopTexture, 285, 40, 70, 70); 
    Noads = new MenuTextureActor(NoadsTexture, 375, 40, 70, 70); 
    Sound = new MenuTextureActor(SoundOnTexture, 465, 40, 70, 70); 
    if (SoundPrefs.getBoolean("Sound", true) == false) { 
     Sound.ChangeTexture(SoundOffTexture); 
    } 
    stage.addActor(Title); 
    stage.addActor(Play); 
    stage.addActor(Balls); 
    stage.addActor(Ratings); 
    stage.addActor(Shop); 
    stage.addActor(Noads); 
    stage.addActor(Sound); 
} 

@Override 
public void resize(int width, int height) { 
    stage.getViewport().update(width, height); 
} 

@Override 
public void render(float delta) { 
    Gdx.gl.glClearColor((float) (255/255.0), (float) (240/255.0), (float) (212/255.0), 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    if (Gdx.input.isTouched()) { 

    } 
    stage.draw(); 
} 
+0

使用'viewport.unproject()'將屏幕(輸入)座標轉換爲世界座標。 – Tenfour04

+0

當用戶按下播放按鈕時,爲什麼要睡覺線程? – Tenfour04

+0

謝謝!這幫助了我!但我怎樣才能獲得世界座標的寬度和高度? –

回答

0

這是與視口有關的常見問題。如果想要顯示多個移動屏幕,則必須使用viewPort。這個問題的答案已經在下面的鏈接中完成了,請檢查一次。它將幫助您保持所有設備的常數屏幕比例。

http://stackoverflow.com/questions/39718125/java-libgdx-keep-actors-position-even-screens-resolution-changes/39946985#39946985 

請檢查一次。它可能會幫助你。謝謝