LibGDX - 如何在 LibGDX 中结合来自两个点击侦听器的 Clicked() 方法,类似于 Android?

LibGDX - How to combine Clicked() method from two click listeners in LibGDX similar to Android?

我想将以下两个按钮(button1 和 button2)组合成一个 clicked() 方法 这类似于 Android 使用 v.getId().

在LibGDX中:

button1.addListener(new ClickListener(){
@Override 
public void clicked(InputEvent event, float x, float y){
button1.setText("It was the first button.");                    
}
}); 

button2.addListener(new ClickListener(){
@Override 
public void clicked(InputEvent event, float x, float y){
button2.setText("It was the second button.");                   
}
});

在Android中:

View.OnClickListener action = new View.OnClickListener() {
  public void onClick(View v) {
      switch(v.getId()) {
        case R.id.button1:
          // It was the first button.
          break;
        case R.id.button2:
          // It was the second button.
          break;
      }
  }
}

感谢回复。

我认为拥有两个 ClickListener 更容易,但您可以将侦听器添加到包含按钮(或舞台或按钮所在的任何对象)的视图中,并在 clicked() 方法中检查哪个按钮 (x, y) 坐标是这样的:

new ClickListener() {
    @Override
    public void clicked(InputEvent event, float x, float y) {
        if (x > button1.x && x < button1.x + button1.width
            && y > button1.y && y < button1.y+button1.height) {
            // button 1 was pressed
        }
        // similar for button2
}

您可以获取角色(在本例中为按钮),然后执行 if-else 语句以获得类似的行为。可以将此点击侦听器分配给您的每个按钮。如果您这样做时没有将按钮存储在成员变量中,那么您需要先声明按钮并将它们设为最终按钮。

ClickListener clickListener = new ClickListener (){
    public void clicked(InputEvent event, float x, float y){ 
        Actor actor = event.getListenerActor();
        if (actor == button1) doButton1Action();
        else if (actor == button2) doButton2Action();
        else if (actor == button3) doButton3Action();
    }
}

你也可以用改变监听器来做,而且稍微简单一些。

ChangeListener changeListener = new ChangeListener (){
    public void changed (ChangeEvent event, Actor actor) {
        if (actor == button1) doButton1Action();
        else if (actor == button2) doButton2Action();
        else if (actor == button3) doButton3Action();
    }
}