私は現在、自己教育のための単純な2dゲームライブラリに取り組んでいます。 すべてが期待どおりに動作するまで。
Javaはカスタムイベントを処理します
ここでは、「ゲームフロー」(タイマーなど)やエンティティ自体によって引き起こされる動きやイベントを計画しています。私は 'EntityEventListener'や 'EntityMotionListener'のようなカスタムイベントを持つことが可能かどうか疑問に思っていました。それから私はMouseListenerとその親クラスを調べました。それから私は、各リスナーのために、このようなリスナーインタフェースおよびアダプタクラスを書いた:
public interface AppEntityEventListener extends EventListener
{
void onCreated(Event e);
void onDeleted(Event e);
void onStepped(Event e);
void onSelected(Event e);
}
public abstract class AppEntityEventAdapter implements AppEntityEventListener
{
@Override public void onCreated(Event e) { }
@Override public void onDeleted(Event e) { }
@Override public void onStepped(Event e) { }
@Override public void onSelected(Event e) { }
}
私は私だけComponents
にリスナーを追加することができたことを検出しましたとEntity
クラスがそれぞれComponent
JComponent
に由来するものではありません。
私はリスナーについて少しお読みになりましたが、私が今必要としているようにそれに対処する方法のポイントはありません。
私の質問が今であることを考慮すると:
- これらのクラスについての悪い事はありますか?
- これらのリスナーを、私の
Entity
クラスに、どのようにして最高の/最も簡単な方法で追加できますか?
ありがとうございます。
EDIT:あなたが言ったように私はすべてのメソッドを追加しました
。だから今私は eventListeners
とmotionListeners
と呼ばれる2つのオブジェクトを持っているそれぞれ独自の追加と削除機能があります。
私は、次のコードを使用して、反復に関するさらに質問を持っている:
private void iterateListeners()
{
for (Object obj : eventListeners.toArray())
{
AppEntityEventListener l = (AppEntityEventListener) obj;
Event e = new Event(this, Event.ACTION_EVENT, this);
l.onCreated(e);
l.onDeleted(e);
l.onSelected(e);
l.onStepped(e);
}
// ... other listener ...
}
この時点でイベントを対処する方法は?これは私が本当に手がかりがない正しい方法です...上記のコードは直感的です。
イベントをポーズすると、ハンドラはadd/removeメソッドを呼び出して、次にConcurrentModificationExceptionを取得できます。リスナーリストのコピーを反復処理する必要があります。 –
ご協力ありがとうございます。これらの追加と削除のメソッドを追加しました。しかし、私は介入しなければならないこのリストを持っていない。あなたはどんなリストについて話していますか?この問題を申し訳ありませんが、私はJavaでこの部分を初めて使っています。 –
addListenerメソッドの原則は、オブジェクトの内部リストにリスナーを追加することです。 removeListenerメソッドの原則は、この内部リストからリスナーを削除することです。イベントを発生させる原則は、リスナーのリストを反復し、onXxx()メソッドを呼び出すことです。リスナーには魔法はありません。 –