我目前正在开发一个简单的 2D 游戏库,仅供自学。
直到知道一切都按预期工作。
现在我正在规划由“游戏流程”(例如计时器)或实体本身触发的运动和事件。我想知道是否可以有像“EntityEventListener”和“EntityMotionListener”这样的自定义事件。然后我查看了 MouseListener 及其父类。然后我为每个监听器编写了一个监听器接口(interface)和一个适配器类,如下所示:
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
。
我读了一些有关监听器的内容,但我不明白如何处理它,因为我现在需要它们。
考虑到我现在的问题是:
- 这些类(class)有什么不好的地方吗?
- 如何以最佳/最简单的方式将这些监听器添加到我的
Entity
类中?
提前致谢。
编辑:
我已经添加了你所说的所有方法。现在我有两个名为 eventListeners
和 motionListeners
的 List
对象,每个对象都有自己的添加和删除功能。
我有一个关于迭代的进一步问题,使用以下代码:
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 ...
}
此时如何处理Event?这是正确的方法吗,我真的不知道......上面的代码很直观。
最佳答案
您可以将监听器添加到您喜欢的任何对象,前提是该对象具有允许添加(和删除)监听器的方法。只需将 addXxxListener()/removeXxxListener()
方法添加到您的对象即可。
这些方法应该简单地向监听器集合添加监听器或从监听器集合中删除监听器,并且对象应该迭代此集合并在适当时调用 onXxx()
方法。
关于Java处理自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10461469/