1

我目前正在开发一个简单的 2d 游戏库,仅用于自学。直到知道一切都按预期工作。

现在我正在计划由“游戏流程”(例如计时器)或实体本身触发的运动和事件。我想知道是否可以有像“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分别从 a 派生的JComponent

我读了一些关于 Listeners 的文章,但我不明白如何处理它,因为我现在需要它们。

考虑到我现在的问题是:

  • 这些课程有什么不好的地方吗?
  • 如何将这些听众以最好/最简单的方式添加到我的Entity班级?

提前致谢。

编辑:

我已经添加了你说的所有方法。所以现在我List调用了两个对象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 ...
}

此时如何处理Event?这是正确的方法吗?我真的不知道……上面的代码很直观。

4

2 回答 2

1

您可以将侦听器添加到您喜欢的任何对象,前提是该对象具有允许添加(和删除)侦听器的方法。只需将addXxxListener()/removeXxxListener()方法添加到您的对象。

这些方法应该简单地将监听器添加到监听器集合/从监听器集合中删除,并且对象应该遍历这个集合并onXxx()在适当的时候调用该方法。

于 2012-05-05T11:44:54.660 回答
0

看看框架潮http://abyu.github.io/tide/能不能帮到你。使用潮汐您可以创建自己的事件,引发和处理这些事件。

于 2015-01-30T10:00:21.840 回答