LibGdx actor绑定不正确

时间:2016-09-26 15:02:28

标签: libgdx

我正在开发一款简单的游戏并面临一个问题。我的虚拟屏幕大小是640x360,但是如果我在设备上启动我的游戏,例如1920x1080的屏幕分辨率,演员的布朗留在我的虚拟世界坐标中,但不是在1920x1080,所以我无法检测到任何输入。任何人都可以帮助我吗?

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();
}

1 个答案:

答案 0 :(得分:0)

这是与视口相关的常见问题。对于多个移动屏幕,您必须使用viewPort。这个问题的答案已经在下面的链接中完成,请检查一次。它将帮助您保持所有设备的常量屏幕比例。

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

请检查一次。它可能会帮助你。谢谢