2012-05-05 4 views
0

저는 현재 자체 교육만을위한 간단한 2d 게임 라이브러리를 작업 중입니다. 모든 것이 예상대로 작동 할 때까지.
Java는 맞춤 이벤트를 처리합니다.

이제 '게임 흐름'(예 : 타이머) 또는 엔티티 자체에 의해 트리거 된 움직임과 이벤트를 계획하고 있습니다. 'EntityEventListener'및 'EntityMotionListener'와 같은 사용자 지정 이벤트를 가질 수 있는지 궁금합니다. 그런 다음 MouseListener와 그 부모 클래스를 살펴 보았습니다. 나는 단지 Components에 청취자를 추가 할 수있는 것으로 나타났습니다과 Entity 클래스가 Component 각각 JComponent에서 파생되지

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) { } 
} 

: 그럼 각 청취자에 대한이 같은 리스너 인터페이스 어댑터 클래스를 썼다.

나는 Listeners에 대해 조금 읽었지 만, 지금은 내가 그것을 필요로 할 때 어떻게 다루어야 할 지 요지가 없습니다.

  • 이러한 클래스에 대한 나쁜 일이 있습니다

    내 질문은 지금 것을 고려?

  • 이러한 수신기를 내 Entity 클래스에 가장 좋고/쉬운 방법으로 추가하려면 어떻게해야합니까?

미리 감사드립니다.

편집 : 당신이 말한 것처럼 나는 모든 방법을 추가 한

. 이제 이라는 두 개의 객체가 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 ... 
} 

방법이 시점에서 이벤트를 처리하는 :

나는 다음과 같은 코드를 사용하여 반복에 대한 추가 질문을 가지고있다? 이게 딱 맞는 방법인가요? 단서가 없습니다 ... 위 코드는 직관적입니다.

답변

1

리스너를 추가 (및 제거) 할 수있는 메소드가있는 경우 원하는 모든 객체에 리스너를 추가 할 수 있습니다. 그냥 addXxxListener()/removeXxxListener() 메서드를 개체에 추가하십시오.

이러한 메서드는 청취자 컬렉션에 청취자를 추가/제거하고 해당 컬렉션을 통해 반복하고 적절한 경우 onXxx() 메서드를 호출해야합니다.

+0

알아 두어야 할주의 사항 : 이벤트를 pocess 할 때 처리기가 메소드 추가/제거를 호출하면 'ConcurrentModificationException'이 발생합니다. 리스너 목록의 사본을 반복해야합니다. –

+0

도움 주셔서 감사합니다. 이러한 추가 및 제거 방법을 추가했습니다. 그러나 나는 중재해야하는 목록을 가지고 있지 않습니다. 어느 목록에 대해 이야기하고 있습니까? 죄송하지만이 질문에 대해서는 자바에서이 부분에 익숙하지 않습니다. –

+0

addListener 메서드의 원칙은 객체의 내부 목록에 리스너를 추가하는 것입니다. removeListener 메소드의 원칙은이 내부 목록에서 리스너를 제거하는 것입니다.이벤트를 발생시키는 원칙은 리스너 목록을 반복하고 onXxx() 메서드를 호출하는 것입니다. 청취자에게는 마술 같은 것이 없습니다. –

0

프레임 워크 조수가 http://abyu.github.io/tide/ 인 경우 참조하십시오. 조수를 사용하여 자신 만의 이벤트를 만들고 인상하고 처리하십시오.

관련 문제