我正在开发一款简单的游戏并面临一个问题。我的虚拟屏幕大小是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();
}
答案 0 :(得分:0)
这是与视口相关的常见问题。对于多个移动屏幕,您必须使用viewPort。这个问题的答案已经在下面的链接中完成,请检查一次。它将帮助您保持所有设备的常量屏幕比例。
http://stackoverflow.com/questions/39718125/java-libgdx-keep-actors-position-even-screens-resolution-changes/39946985#39946985
请检查一次。它可能会帮助你。谢谢