我目前正在研究一个简单的2D游戏库,仅供自我教育。直到知道一切都按预期工作。
Java处理自定义事件
现在我打算在移动与由“gameflow”(例如定时器)触发的事件或实体itselves。我想知道是否有可能拥有像'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
类?
在此先感谢。
编辑:
像你说的我已经添加的所有方法。因此,现在我有两个List
对象,分别称为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'。您必须迭代侦听器列表的副本。 –
感谢您的帮助。我添加了这些添加和删除方法。但是我没有得到这份清单中我必须介入的部分。你在说什么名单?对不起这个问题,但我是新来的这部分在Java中。 –
addListener方法的原理是将侦听器添加到对象的内部列表中。 removeListener方法的原理是从此内部列表中删除侦听器。触发事件的原理是遍历侦听器列表,并调用其onXxx()方法。听众没有什么不可思议的。 –