我需要为学校制作一个简单的“策略游戏模拟器”。为此,我需要创建一个Event Dispatcher(事件循环),将事件发送给注册方。例如,我在地图上有资源。一个事件是“位置1的资源耗尽”。一个“玩家”对该事件感兴趣。
我如何创建调度程序(并为一个特定事件注册一个玩家)。此外,调度员如何检查事件?它只是做if(resourceLocation1.getNoResource()==0) trigerEvent();
之类的事情,还是有其他更优雅的方式。
我使用了事件监听器(主要是在ActionScrip3中)但从未创建过自定义事件和自定义事件调度程序。感谢任何帮助,包括一些教程或示例代码的链接。
如果我不清楚我在寻找什么,请告诉我,我会尽力解释一下
感谢。
答案 0 :(得分:1)
Java具有您可以使用的内置线程安全Observer模式。
要编写自己的文件,您可以Player
实现ResourceDepeletionListener
接口并将其添加到Resource
类中的侦听器数组中。当资源达到零时,他们会在所有resourcesDepleted()
个对象上调用ResourceDepeletionListener
。
答案 1 :(得分:1)
如何实施observer pattern?
例如,您可以拥有ResourceObserver
,它将特定Resource
注册为可观察对象。从那里,您可以将Player
个对象注册为ResourceObserver
的观察者。地图对象将保存所有资源。在你的事件循环中,你会有类似的东西:
...
Map.updateResources();
...
例如,当您致电updateResources
时,所有地图资源都会检查它们是否已耗尽。如果资源已被取消,它将通知它ResourceObserver
,{{1}}将通知所有注册的玩家该资源。
答案 2 :(得分:1)
您的EventDispatcher
无需检查所有可能的情况并通知所有可能的听众。只需通知已注册某种类型事件的侦听器。
注册Player
以根据游戏事件通知
eventDispatcher.register(player, Events.RESOURCE_DEPLETION_EVENT);
然后,当资源达到Resource
0
会提供活动
class Resource {
public void deplete(int amount) {
this.amount -= amount;
if (this.amount <= 0)
eventDispatcher.notify(this, Events.RESOURCE_DEPLETION_EVENT);
}
}
否则,您将最终得到一个包含逻辑的大量事件循环,这会消耗性能并且难以调试。