【问题标题】:about LibGdx addListener关于 LibGdx addListener
【发布时间】:2014-03-10 09:59:48
【问题描述】:

我相信这个问题之前有人问过,但我似乎有点不走运。我的问题是如何在流程中间启用按钮/演员的addListener?举个例子,在activity screen之间的assets loading screen(假设用户已经完成了Stage A,loading screen是为Stage B加载assets),continue按钮只有在所有资产都已加载。如果我将 addListener 添加到 render() 部分,它将根据 post 创建大量匿名 inputListener。但是,如果我把它放在show() 部分,我认为它不会起作用。我的问题是我应该把这个addListener 放在哪里才能让演员可以触摸,但又不会创建那些匿名的inputListener?以及正确的使用方法是什么?

【问题讨论】:

    标签: java android touch libgdx listener


    【解决方案1】:

    我建议创建 ClickListener 而不是 InputListener 并像往常一样添加它。在 Listener 内部,您检查加载是否完成。如果它完成了,你就可以做任何你想做的事情。如果不是,您无需任何操作即可返回。

    举个例子,如何将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
                 }
            }
        });
    

    要将它添加到不同的演员或按钮,它应该是相似的。请注意添加按钮的舞台也是Inputprocessor。所以请确保您像这样添加它Gdx.input.setInputProcessor(stage);

    在这种情况下,我认为您不需要整个 InputListener 只需使用 ClickListener 来完成这个小任务。 InputListener 为您提供了更广泛的方法,我认为您不需要这些方法。它用于检测touchupstouchdowns 和幻灯片事件以及更多我认为您不需要按钮的事件。也许对于你拖来的演员。

    你在屏幕的构造函数中创建了这一切。永远不要在 render 方法中做这样的事情,因为它会在每一帧创建一个新的监听器。 (每秒 60 个!)

    【讨论】:

    • 谢谢@Bennx。理论上,如果我想控制每个按钮,我应该有一些东西(例如布尔值)来禁用/启用它。 inputListener vs ClickListener,在内存使用和物理处理器使用方面,哪个方法消耗更少?
    • 我真的不认为这很重要。但是在您的情况下,您不需要注意它是向上还是向下事件等等。你只需要知道它是否被点击,所以我会选择ClickListener。我认为这更简单。但是,如果您愿意,可以使用普通的InputListener。顺便提一下。 ClickListeneter 扩展了 InputListener!所以最后它是一样的,只是在简单的情况下使用起来更简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    相关资源
    最近更新 更多