1

私は現在、独学専用のシンプルな 2D ゲーム ライブラリに取り組んでいます。すべてが期待どおりに機能していることを知るまで。

現在、「ゲームフロー」(タイマーなど)またはエンティティ自体によってトリガーされる動きとイベントを計画しています。「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から派生していないことがわかりました。ComponentJComponent

リスナーについて少し読みましたが、今のところ必要なので、それを処理する方法がわかりません。

私の質問が今あることを考えると:

  • これらのクラスについて悪い点はありますか?
  • Entityこれらのリスナーをクラスに追加するにはどうすればよいですか?

前もって感謝します。

編集:

あなたが言ったように、私はすべてのメソッドを追加しました。これで、2 つのListオブジェクトが呼び出されeventListenersmotionListenersそれぞれに独自の追加機能と削除機能があります。

次のコードを使用して、反復に関してさらに質問があります。

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 ...
}

この時点でイベントを処理するにはどうすればよいですか? これは正しい方法ですか?私にはまったく手がかりがありません...上記のコードは直感的です。

4

2 に答える 2

1

オブジェクトにリスナーを追加 (および削除) できるメソッドがあれば、任意のオブジェクトにリスナーを追加できます。addXxxListener()/removeXxxListener()オブジェクトにメソッドを追加するだけです。

これらのメソッドは、リスナーのコレクションに対してリスナーを単純に追加/削除する必要があり、オブジェクトはこのコレクションを反復処理し、必要onXxx()に応じてメソッドを呼び出す必要があります。

于 2012-05-05T11:44:54.660 に答える