2016-05-10 85 views
0

我正在做空闲游戏,但现在我不知道如何制作HUD的听众。在我的hud的每个按钮中实例化一个InputListener()是可以的吗?我有20个按钮或演员触摸。LibGDX-Scene2D:如何使用多个按钮制作hud?

+0

为什么不能?......... – Tenfour04

+0

我是说,这是唯一的选择吗?因为我需要从InputListener类的touchDown方法访问'按钮'的变量和函数(我知道我可以访问,但我需要传递参数,或创建一个扩展InputListener的内部类等)。它就像很多代码一样,想象20个按钮实例化扩展的InputListener类,每个类都有自己的代码只需一个按钮 –

+0

我不太了解你的问题。这听起来像你有一个复杂的设置。侦听器只需要在'touchDown'中调用一个方法。您也可以将相同的侦听器分配给每个按钮,并让'touchDown'方法针对所有按钮检查event.getListenerActor(),以决定调用哪个方法。如果你希望按钮的行为更像OS的按钮(取消按下按钮并释放按钮),然后使用ChangeListener而不是InputListener,并使用'changed'而不是'touchDown'来响应它。 – Tenfour04

回答

1

只需使用addListener()方法为每个演员,你想要cichode。我曾经使用ClickListener来达到这个目的,不过有时候推荐使用ChangeListener,因为当按钮被禁用时它的行为更好。

所以,你需要做的仅仅是

Button button; 

    //creating button... 

    button.addListener(new ClickListener(){ 
     @Override 
     public void clicked(InputEvent event, float x, float y) 
     { 
      //Do something 
     } 
    }); 

与同为你的HUD舞台另一个按钮/演员。

你也可以take a look at this thread我问过很多听众的表现。

+0

那个线程帮了我很多,谢谢 –

1

这是一个scene2d按钮,它非常易于使用,我不明白问题是什么或为什么你担心在每个按钮或UI对象上有一个监听器,这对我来说似乎很合理。

button = new Button(buttonStyle); 
    button.setPosition(x, y); 
    button.addListener(new ClickListener() { 
     @Override 
     public void clicked(InputEvent event, float x, float y) { 
      Gdx.app.log(TAG, "Button clicked"); 
     }; 
    });