1.我想知道以下结构是否不正确,原因是什么,以及解决方案是什么:
假设我已经实现了网络游戏的客户端
客户有2个主要包:
A.GUI - 保持所有摆动Jpanels等
B.LogicEngine
在Logic引擎中,我有一个名为clientThread的类,其主要目标是与服务器通信以获取在Gui Panel上执行的命令,以及由于Gui Panels上的用户选择而发回信息。< / p>
2.为了做到这一点,我倾向于在clientThread中引用我的主Gui面板,反之亦然,在两类不同项目之间进行循环引用是错误的吗?
3.在面向对象编程问题上执行要在Gui上显示的内容,如同客户端线程一样负责以某种方式管理游戏流程,尽管它在逻辑引擎包上?
4.如果Gui部分知道并使用逻辑部分这是一个问题吗?
想听听一些建议 非常感谢你
答案 0 :(得分:8)
显然,GUI应该依赖于引擎,而不是相反(并且,上帝禁止,它们不应该相互依赖)。
您的问题实际上很常见且很容易解决。引擎线程应允许客户端代码安装一个侦听器,每次发生时都会通知该侦听器。比GUI实现该侦听器并安装它。请注意,游戏逻辑引擎只知道侦听器接口,而不是GUUI包中的特定实现。
这是Observer模式的实现,它有几个优点:
最后,从逻辑线程操作GUI没有任何问题,无论你必须知道event dispatching thread。
答案 1 :(得分:5)