touchDown および touchUp イベントをアクター オブジェクトから applicationListener クラスにエスカレートしようとしています。そのために、fire(event); を呼び出しました。私のアクターの InputListener で
this.addListener(new InputListener(){
public boolean touchDown(InputEvent event, float x, float y, int pointer, int buttons){
Gdx.app.log("Example", "touch started at (" + x + ", " + y + ")");
fire(event);
return true;
}
public void touchUp(InputEvent event, float x, float y, int pointer, int buttons){
Gdx.app.log("Example", "touch ended at (" + x + ", " + y + ")");
}
});
ApplicationListener クラス (アクターのステージを含む) でイベントを処理するために、ステージに InputListener を追加しました。
Gdx.input.setInputProcessor(stage);
stage.addListener(new InputListener(){
public boolean touchDown(InputEvent event, float x, float y, int pointer, int buttons){
Gdx.app.log("FIRE!!!", "I CAUGHT A FIRED EVENT!");
event.stop();
return true;
}
public void touchUp(InputEvent event, float x, float y, int pointer, int buttons){
Gdx.app.log("FIRE!!!", "the fired event even touchupped.");
}
});
しかし、自分のアクターに触れると、StackOverflowError と、いくつかの InputListeners から大量の例外が発生します (イベントが適切に停止されておらず、シーン内のすべてのアクターに伝播されていると想定しています)。ここで何が欠けていますか?
また、イベントを発生させた後、event.getTarget() (Actor である) を Actor-Subclass にキャストできなくなりました。次のコードを ApplicationListener で使用するとエラーが発生しますが、MyActor クラスでは機能します。
MyActor actor = (MyActor)event.getTarget();
ターゲットは実際には MyActor オブジェクトであるため、アクターとしてだけでなく MyActor としてアクセスするにはどうすればよいですか?