我正在将 Akka 框架与 jMonkeyEngine (jME3) 一起用于我的小 scala/java 游戏。通过调整一些Akka dispatcher magic我设法在与 jME3 的主循环线程相同的线程中运行专用参与者。为了使 Actor 能够访问类 SimpleApplication 的 protected 变量(应该扩展该变量以使用 jME3 创建游戏),我认为创建一个继承 class SimpleApplication 并混合 trait Actor 的类会很巧妙。像这样的事情:
JmeActor extends SimpleApplication with Actor
问题在于 SimpleApplication 和 Actor 都有一个相互冲突的上下文变量。目前,我已将 SimpleApplication 的 context 变量重命名为 jmeContext 并重新编译了 jME3。结果工作得很好,但对我来说,这个设计似乎被破坏了,因为 jME3(甚至 Akka)的任何进一步版本都将要求我再次手动进行此重构。开发团队甚至有可能(尽管不太可能)进一步修改 SimpleApplication,从而使这种冲突避免技术变得更加困难。
有人能找到一个简单的解决方案吗?
最佳答案
我的直觉表明,将 Actor 实例与如此丰富的类(如游戏引擎的“主”类)紧密结合可能不是一个好的设计选择。我建议对 SimpleApplication
进行子类化,这样您需要的所有功能都可以通过公共(public)方法公开,然后只需在您的 Actor 中保留对该功能的引用即可;我的猜测是,您希望能够通过向 Actor 发送消息来影响游戏引擎,从而启用 Actor 。
关于java - 与 Akka Actor 特性混合与基类发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16497128/