java - LibGDX 按钮无法识别点击(Stage + ChangeListener)
问题描述
编辑:第一个 Cemmentator “第二个”是对的。我忘了设置 Gdx.input.setInputProcessor(stage); - 现在一切正常。谢谢!
我的 Libgdx 按钮“返回”、“菜单”和“TryAgain”(将您带回另一个屏幕)不起作用。
我研究了我能找到的所有解决方案,但它们仍然无法正常工作。我还在我的其他屏幕中使用按钮和阶段,它们都像魅力一样工作。
你们看到代码中有任何错误吗?CreateStage()
创建舞台并通过渲染方法显示它们。
任何帮助是极大的赞赏!
public class HighscoreScreen extends ScreenAdapter {
private final GameClass game;
private int score;
private String name;
private boolean menuView;
private SpriteBatch batch;
private BitmapFont scoreFont;
private String[] players;
private int[] scores;
private int counter = 0;
private OrthographicCamera camera;
private Stage stage;
private ScreenViewport v;
public HighscoreScreen (GameClass game, OrthographicCamera camera, int score, String name) {
this.camera = camera;
this.game = game;
this.score = score;
this.name = name;
this.batch = new SpriteBatch();
menuView = false;
batch = new SpriteBatch();
scoreFont = new BitmapFont(Gdx.files.internal("Fonts/score.fnt"),
Gdx.files.internal("Fonts/score.png"),false);
createStage();
}
public HighscoreScreen (GameClass game, OrthographicCamera camera){
this.game = game;
this.camera = camera;
this.batch = new SpriteBatch();
menuView = true;
scoreFont = new BitmapFont(Gdx.files.internal("Fonts/score.fnt"),
Gdx.files.internal("Fonts/score.png"),false);
}
public void createStage(){
v = new ScreenViewport();
v.setCamera(camera);
stage = new Stage(v, batch);
if (menuView) {
Buttons back = new Buttons("Back");
stage.addActor(back.createButton(GameInfo.WIDTH / 2 - 100,
GameInfo.HEIGHT / 2 - 200));
back.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
game.setScreen(new MenuScreen(game));
}
});
} else {
Buttons tryAgain = new Buttons("Try Again");
stage.addActor(tryAgain.createButton(GameInfo.WIDTH / 2 - 200,
GameInfo.HEIGHT / 2 - 200));
tryAgain.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
game.setScreen(new SurvivalScreen(game, name));
}
});
Buttons menu = new Buttons("Menu");
stage.addActor(menu.createButton(GameInfo.WIDTH / 2,
GameInfo.HEIGHT / 2 - 200));
menu.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
game.setScreen(new MenuScreen(game));
}
});
}
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
if (menuView) {
if (counter == 0) {
createStage();
writeScoresToFile();
readHighscore();
counter++;
}
batch.begin();
highscoreToFont();
batch.end();
stage.act();
stage.draw();
} else {
if (counter == 0) {
createStage();
writeScoresToFile();
readHighscore();
compareHighscore();
writeHighscore();
counter++;
}
batch.begin();
highscoreToFont();
batch.end();
stage.act();
stage.draw();
}
}
public void dispose(){
batch.dispose();
stage.dispose();
}
解决方案
您可能缺少输入处理器的设置到您的阶段(至少它不在您发布的代码中)。
Gdx.input.setInputProcessor(stage);
注意:
假设 Buttons 类返回正确的演员。
(见我上面的评论)
推荐阅读
- windows - 从 .ebextensions 将可执行文件添加到 Windows PATH,然后在后续命令中调用可执行文件
- unity3d - 统一不同屏幕尺寸下的不同物理行为
- python - 如何将数据帧导出到谷歌云存储桶中的 csv
- python - 如何使用for循环查找字符串中子字符串的所有实例
- workflow - Magento2 开发工作流程(我疯了吗?)
- amazon-web-services - 如何知道亚马逊 emr 集群上的 mapred-site 值?
- ios - 当手指离开视图时停止 UILongPressGestureRecognizer
- python - 如何根据列表中的部分键重新排列有序字典
- terminal - 如何安装 netCDF4?
- excel - 如何在具有额外(非日期)列的数据透视表中对日期进行分组