关于LibGdx addListener

时间:2014-03-10 09:59:48

标签: java android touch libgdx listener

我相信这个问题之前已被问过,但似乎我有点不走运。我的问题是如何在进程中间启用按钮/演员addListener?举例来说,在活动屏幕之间的资产加载屏幕上(假设用户完成了阶段A,加载屏幕是为阶段B加载资产),继续按钮只能在之后启用(先前显示但不启用)所有资产都已加载。如果我将addListener添加到render()部分,它将根据此post创建大量匿名inputListener。但是,如果我将它放在show()部分中,我认为它不会起作用。我的问题是,我应该在哪里放置addListener以使演员可以触摸而不创建匿名inputListener?什么是使用它的正确方法?

1 个答案:

答案 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为您提供了更广泛的方法,我认为您不需要这些方法。它用于检测touchupstouchdowns以及幻灯片事件以及更多您认为不需要的按钮。也许是你拖着的演员。

你在屏幕的构造函数内部创建了这个。永远不要在render方法中执行此类操作,因为它会在每个帧中创建一个新的侦听器。 (每秒60次!)