使用相同类的客户端-服务器游戏中的渲染



所以我在构思一款小型在线游戏时遇到了这个小问题。

以下是它的工作原理:客户端和服务器将使用相同的"世界"实现——对象、物理模拟。假设我们有一个类World,它包含一个WorldObjects向量。WorldObject是其他类(如PlayerObject、BoxObject、MonsterObject)的派生基类。这里的问题是如何有效地为这些对象类声明自定义呈现方法。例如,PlayerObject的渲染方式必须与BoxObject不同。

需要记住的是,我们不能只创建一个虚拟渲染方法,因为这意味着例如BoxObject必须#包含"OpenGL.h",而这在服务器端是无法完成的(我们希望服务器端清除图形库)。

那么如何做到这一点呢?我想出了一个这样的想法:创建一个单独的单例(仅客户端),其中包含不同对象类型(例如通过枚举标识)的渲染方法的实现,但这是最好的方法吗?你知道什么更高效、更灵活的吗?

当然,我们在这里谈论的是C++,但如果有一条规则或实践你知道并在另一种语言中使用,请分享(这就是为什么我没有在帖子中真正指定语言)。谢谢

您可以引入从支持渲染的PlayerObject和BoxObject派生的类型,例如PlayerObjectRenderable和BoxObjectRenderaable(或者更合理地说,您引入了类似Renderable的Interface)。然后,当您为客户端创建(或分解)对象时,您将创建这些ObjectRenderable类的实例,而对于服务器端,您将使用更通用的实例。当它进入渲染时,您可以提供对Renderable接口的引用或指针。客户端工厂构建对象也可能是从广义工厂构建对象派生的,依此类推…

最新更新