저는 현재 자체 교육만을위한 간단한 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
클래스에 가장 좋고/쉬운 방법으로 추가하려면 어떻게해야합니까?
미리 감사드립니다.
편집 : 당신이 말한 것처럼 나는 모든 방법을 추가 한
. 이제 이라는 두 개의 객체가 eventListeners
및 motionListeners
으로 나뉘며 각 객체에는 고유 한 추가 및 제거 기능이 있습니다.
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 ...
}
방법이 시점에서 이벤트를 처리하는 :
나는 다음과 같은 코드를 사용하여 반복에 대한 추가 질문을 가지고있다? 이게 딱 맞는 방법인가요? 단서가 없습니다 ... 위 코드는 직관적입니다.
알아 두어야 할주의 사항 : 이벤트를 pocess 할 때 처리기가 메소드 추가/제거를 호출하면 'ConcurrentModificationException'이 발생합니다. 리스너 목록의 사본을 반복해야합니다. –
도움 주셔서 감사합니다. 이러한 추가 및 제거 방법을 추가했습니다. 그러나 나는 중재해야하는 목록을 가지고 있지 않습니다. 어느 목록에 대해 이야기하고 있습니까? 죄송하지만이 질문에 대해서는 자바에서이 부분에 익숙하지 않습니다. –
addListener 메서드의 원칙은 객체의 내부 목록에 리스너를 추가하는 것입니다. removeListener 메소드의 원칙은이 내부 목록에서 리스너를 제거하는 것입니다.이벤트를 발생시키는 원칙은 리스너 목록을 반복하고 onXxx() 메서드를 호출하는 것입니다. 청취자에게는 마술 같은 것이 없습니다. –