- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:第一水泥工“第二”是对的。我忘记设置 Gdx.input.setInputProcessor(stage); - 现在一切都正常进行。谢谢!
<小时/>我的 Libgdx 按钮“后退”、“菜单”和“再试一次”(使您返回到另一个屏幕)不起作用。
我尝试了所有能找到的解决方案,但它们仍然无法正常工作。我还在其他屏幕中使用按钮和阶段,它们都非常有用。
你们发现代码中有什么错误吗? 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 类返回一个正确的 actor。
(请参阅上面我的评论)
关于java - LibGDX 按钮无法识别点击(Stage + ChangeListener),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56321168/
我想添加到属性监听器,等待此监听器被调用并删除此监听器。所以我写了下面的代码: ChangeListener listener = (observable, oldValue, newValu
我正在学习更改监听器,并想了解为什么我的部分代码在用户移动 slider 时没有触发更改监听器。 这里是听者。一切都在同一个方法中: ChangeListener lst = new ChangeLi
假设我们有一个带有 fx:include 的根窗口: startwindow.fxml的代码: 单击按钮将窗口更改为新窗口。它的 Controller ,StartW
当我编码时,我添加了以下代码: nameComboBox.valueProperty().addListener(new ChangeListener() { @Override
代码如下: package sample; import javafx.beans.InvalidationListener; import javafx.beans.Observable; impo
我想概括以下模式: setChangeListener = c -> { try { // do something dangerous } catch (final IOEx
我在 slider 上有一个简单的更改监听器。任何人都可以解释为什么当我点击一个新位置时它被解雇了 3 次。在我编写代码将先前的值保存在某处以查看它是否真的改变之前,我想看看是否有另一种方法可以弄清楚
我对 Java 很陌生,在仔细研究文档后,我发现自己陷入了困境。 我有一个小程序,使用 JavaFX MediaPlayer播放 wav 文件。我的播放器对象有一个 currentTimeProper
我有一个 JavaFX 应用程序,其中有一个并发任务。当任务运行时,我想将来自 updateMessage() 的消息附加到 TextArea 因为绑定(bind)不会将新文本附加到 TextArea
场景: 我有一个容器对象,它包含所有继承自 MyContainedObject 类的混合对象。容器类的消费者不能直接访问包含的对象,但我有兴趣知道它们何时发生变化。 设计决策: 监听特定类类型的 Ch
我试图从官方文档的“通知”部分了解 Realm 中的通知类型,当我在多个托管对象中使用 RealmObject addChangeListener 时,只有一个对象发生变化时,所有这些通知类型都会被调
我需要检测所选标签何时发生变化,并获取其索引。 以下代码有效,但它触发 println 的次数与当前加载的选项卡数量一样多: tabbedPane.addChangeListener(new Chan
在我的 JavaFX 应用程序中,我在 TreeView 中使用 Checkboxes 来更改节点的可见性。 选中复选框 = 一些节点可见 取消选中复选框 = 一些节点不可见 但是,在特殊情况下,应该
我只关心属性是否已更改,而不是新值。 注册 InvalidationListener 而不是 ChangeListener 是否有利? 我假设对属性的更改首先会使该属性无效并通知所有无效监听器。仅当注
我不知道为什么会收到警告“来自类型 new ChangeListener(){} 的方法 tabChanged(ChangeEvent) 从未在本地使用” private void setUpTabb
我正在寻找代码中的功能,以便我可以在几秒钟内输入完整内容simpleTextField 中的名称,我需要它,因为如果我输入例如: 我输入 R - 然后方法改变正在执行它的任务 我输入 RR - 然后方
我确实有一个由多个可观察的 SimpleDoubleProperty 组成的模型,我现在有一个程序,它根据可观察属性的变化运行一个函数。 我现在有一个函数calculateThings,它会在变化时被
如何打印顶部的JLabel? import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame;
我在舞台上添加了一个表,但无法获得点击监听器来触发它: Table table = new Table(); table.setX(0); table.setY(0); table.setWidth(
我希望 ObservableList 中有一个粗体的标题。我将其设置为粗体,但在选择它时会遇到异常 block ,因为它不是字符串。我可以将其他项目设为文本,但 ChangeListener 需要一个
我是一名优秀的程序员,十分优秀!