2016-12-16 14 views
2

Scene2Dでは、私はカスタムアクタを持っていますが、どのようにして '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; 
    } 
} 

しかし、正しいと感じない私には、より効率的な方法が必要です。あなたは1を知っていればそう、私に知らせてください:あなたはこのクリックリスナーをインスタンス化しているクラスで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

関連する問題