2012-05-05 12 views
0

私は現在、自己教育のための単純な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クラスがそれぞれComponentJComponentに由来するものではありません。

私はリスナーについて少しお読みになりましたが、私が今必要としているようにそれに対処する方法のポイントはありません。

私の質問が今であることを考慮すると:

  • これらのクラスについての悪い事はありますか?
  • これらのリスナーを、私のEntityクラスに、どのようにして最高の/最も簡単な方法で追加できますか?

ありがとうございます。

EDIT:あなたが言ったように私はすべてのメソッドを追加しました

。だから今私は eventListenersmotionListenersと呼ばれる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 ... 
} 

この時点でイベントを対処する方法は?これは私が本当に手がかりがない正しい方法です...上記のコードは直感的です。

答えて

1

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

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

+0

イベントをポーズすると、ハンドラはadd/removeメソッドを呼び出して、次にConcurrentModificationExceptionを取得できます。リスナーリストのコピーを反復処理する必要があります。 –

+0

ご協力ありがとうございます。これらの追加と削除のメソッドを追加しました。しかし、私は介入しなければならないこのリストを持っていない。あなたはどんなリストについて話していますか?この問題を申し訳ありませんが、私はJavaでこの部分を初めて使っています。 –

+0

addListenerメソッドの原則は、オブジェクトの内部リストにリスナーを追加することです。 removeListenerメソッドの原則は、この内部リストからリスナーを削除することです。イベントを発生させる原則は、リスナーのリストを反復し、onXxx()メソッドを呼び出すことです。リスナーには魔法はありません。 –

0

フレームワークの潮汐http://abyu.github.io/tide/が役立つかどうかをご覧ください。あなたは自分のイベントを作成し、そのイベントを発生させ、処理します。

関連する問題