2016-12-16 2 views
2

На Scene2D, f У меня есть пользовательский актер, как заставить мой ClickListener иметь возможность ссылаться на эти поля и методы customActor? Так, например, ввести метод идет:Scene2D ClickListener с пользовательским актером

public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { ... } 

Дело в том, что эта ссылка fromActor актер не может увидеть поля, которые я хочу изменить в моей CustomActor ... Я понимаю, что я мог бы сделать что-то вместе :

public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {  
    if(fromActor instanceof CustomActor) { 
     CustomActor actor = (CustomActor)fromActor; 
    } 
} 

Но для меня это не так, должно быть, более эффективным способом; так что если вы знаете об одном, пожалуйста, дайте мне знать: D

+0

Если все ваши экземпляры этого актера используют один и тот же тип прослушивателя кликов, вы можете определить прослушиватель кликов как внутренний класс актера, или вы можете создать его как анонимный класс из конструктора актера. Если нет, назначьте своего участника переменной-члену в том же классе, что и определитель вашего клика, и обратитесь к этой переменной-члену в методах прослушивания кликов. – Tenfour04

ответ

0

В классе, где вы инстанцировании этот щелчок слушателя, добавить внутренний класс, который выглядит следующим образом:

class CustomListener extends ClickListener { 

    private final CustomActor yourActor; 

    public CustomListener(CustomActor yourActor) { 
     this.yourActor = yourActor; 
    } 

    @Override 
    public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { 
     this.yourActor.accessTheFieldYouWant; 
    } 
} 

Конечно, Вы можете переопределить любой методы, которые вам нужны, а не только enter.

Затем используйте его как этот

yourActor.addListener(new CustomListener(yourActor) { 
    @Override 
    public void clicked(InputEvent event, float x, float y) { 
    } 
}); 

Вот как я обычно множество вещей, но вы можете поставить собственный код класса слушателя, куда вы хотите, или иметь отдельный файл класс для него и импортировать его.

+0

Но разве у меня не может быть только 1 слушатель для одного и того же типа актеров? «тот же тип», являющийся несколькими актерами одного и того же класса. – Whiskydog