【问题标题】:LibGDX - How to combine Clicked() method from two click listeners in LibGDX similar to Android?LibGDX - 如何在类似于 Android 的 LibGDX 中组合来自两个单击侦听器的 Clicked() 方法?
【发布时间】:2015-05-29 20:49:01
【问题描述】:

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

在 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.");                   
}
});

在安卓中:

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;
      }
  }
}

感谢回复。

【问题讨论】:

    标签: java android onclick libgdx onclicklistener


    【解决方案1】:

    您可以获取参与者(在本例中为按钮),然后执行 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();
        }
    }
    

    【讨论】:

      【解决方案2】:

      我认为拥有两个 ClickListener 更容易,但您可以将侦听器添加到包含按钮(或 Stage 或按钮所在的任何对象)的视图中,并在 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
      }
      

      【讨论】:

      • 谢谢,有没有类似安卓的ID可以参考?
      • 您可以使用 setName(String) 为您的按钮提供唯一的标识名称,然后使用 getName() 来检查它们。这适用于 LibGDX 中的任何类型的演员。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多