我相信这个问题以前曾被问过,但似乎我很不幸找不到它。我的问题是如何在流程的中间启用按钮/角色的addListener?例如,在活动屏幕之间的资产加载屏幕上(假设用户已完成阶段A,加载屏幕是为阶段B加载资产),则继续按钮只能在所有资产均已加载。如果将addListener添加到render()部分中,它将根据此post创建许多匿名inputListener。但是,如果将其放在show()部分中,我认为它不会起作用。我的问题是我应该在哪里放置此addListener以便使演员可触摸,却不创建那些匿名的inputListener?正确的使用方法是什么?

最佳答案

我建议创建一个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
             }
        }
    });


要将其添加到不同的actor或Buttons,它应该是相似的。请注意,添加按钮的阶段也是Inputprocessor。因此,请确保您这样添加它Gdx.input.setInputProcessor(stage);

在这种情况下,我不认为您需要一个完整的InputListener只需将ClickListener用于此小任务。 InputListener为您提供了我认为不需要的更多方法。它用于检测touchupstouchdowns以及幻灯片事件以及更多我认为不需要按钮的事件。也许是您拖拉的演员。

您可以在屏幕的构造函数中全部创建。切勿在render方法内部执行此类操作,因为它将在每一帧创建一个新的侦听器。 (每秒60个!)

09-12 19:18