以编程方式在Actor libgdx上执行单击

以编程方式在Actor libgdx上执行单击,libgdx,scene2d,Libgdx,Scene2d,我的问题很简单 我在演员中添加了一些ClickListeners。我想以编程方式对它们执行单击事件 类似于myActor.performClick() 我想出了一个解决方案: public static void performClick(Actor actor) { Array<EventListener> listeners = actor.getListeners(); for(int i=0;i<listeners.size;i++) {

我的问题很简单

我在演员中添加了一些
ClickListener
s。我想以编程方式对它们执行单击事件


类似于
myActor.performClick()

我想出了一个解决方案:

public static void performClick(Actor actor) {
    Array<EventListener> listeners = actor.getListeners();
    for(int i=0;i<listeners.size;i++)
    {
        if(listeners.get(i) instanceof ClickListener){
            ((ClickListener)listeners.get(i)).clicked(null, 0, 0);
        }
    }
}
publicstaticvoidperformclick(Actor){
数组侦听器=actor.getListeners();
对于(int i=0;i您还可以使用:

InputEvent event1 = new InputEvent();
event1.setType(InputEvent.Type.touchDown);
button.fire(event1);

InputEvent event2 = new InputEvent();
event2.setType(InputEvent.Type.touchUp);
button.fire(event2);
这也将显示任何有帮助的按下图像更改。

我这样做(对我来说似乎更好):


如果在实际触地过程中出现异常,仍然会调用触地,对吗?但我看不到需要完美模拟的实际用例。
public void triggerButtonClicked(Button button) {
    InputEvent inputEvent = Pools.obtain(InputEvent.class);
    inputEvent.reset();
    inputEvent.setButton(0);
    inputEvent.setRelatedActor(button);

    try {
        inputEvent.setType(InputEvent.Type.touchDown);
        button.fire(inputEvent);

        inputEvent.setType(InputEvent.Type.touchUp);
        button.fire(inputEvent);
    } finally {
        Pools.free(inputEvent);
    }
}