Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically perform click on Actor libgdx

Tags:

libgdx

scene2d

My question is straightforward.

I have some ClickListeners added to an Actor. I want to execute a click event on them programmatically.

Something like myActor.performClick();

like image 457
Rahul Verma Avatar asked Sep 16 '14 13:09

Rahul Verma


3 Answers

You can also use:

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

InputEvent event2 = new InputEvent();
event2.setType(InputEvent.Type.touchUp);
button.fire(event2);

This will also show any pressed image change which can be helpful.

like image 90
user2299004 Avatar answered Nov 11 '22 21:11

user2299004


I figured out a solution :

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

This method can be called passing the actor on whom click needs to be performed

like image 34
Rahul Verma Avatar answered Nov 11 '22 21:11

Rahul Verma


I do it like this (seems nicer to me):

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);
    }
}
like image 42
Betalord Avatar answered Nov 11 '22 23:11

Betalord