我相信这个问题之前已被问过,但似乎我有点不走运。我的问题是如何在进程中间启用按钮/演员addListener
?举例来说,在活动屏幕之间的资产加载屏幕上(假设用户完成了阶段A,加载屏幕是为阶段B加载资产),继续按钮只能在之后启用(先前显示但不启用)所有资产都已加载。如果我将addListener添加到render()
部分,它将根据此post创建大量匿名inputListener。但是,如果我将它放在show()
部分中,我认为它不会起作用。我的问题是,我应该在哪里放置addListener
以使演员可以触摸而不创建匿名inputListener
?什么是使用它的正确方法?
答案 0 :(得分:1)
我建议您创建一个ClickListener
而不是InputListener
并像往常一样添加它。在监听器内部,您可以检查加载是否完成。如果它完成了你做你想做的事。如果不是,你不返回任何行动。
为您举例说明如何将ClickListener
添加到应该已完成任务的TextButton中:
TextButtonStyle style = new TextButtonStyle();
style.font = new BitmapFont();
style.font.setColor(Color.WHITE);
continue= new TextButton("continue",
style);
continue.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
if(manager.update()){ //returns true if the AssetManager is done in case you use an AssetManager
basegameclass.setScreen("menu"); //sets the menu screen
}else{
//not done do nothing or do something else like showing loading not done
}
}
});
要将它添加到不同的演员或按钮,它应该是simmelar。只需注意添加Button的舞台也是Inputprocessor
。因此,请务必按照此Gdx.input.setInputProcessor(stage);
在这种情况下,我不认为你需要一个整体InputListener
只需要使用ClickListener来完成这个小任务。 InputListener
为您提供了更广泛的方法,我认为您不需要这些方法。它用于检测touchups
和touchdowns
以及幻灯片事件以及更多您认为不需要的按钮。也许是你拖着的演员。
你在屏幕的构造函数内部创建了这个。永远不要在render方法中执行此类操作,因为它会在每个帧中创建一个新的侦听器。 (每秒60次!)