C++中具有不同类的子/父结构
Child/Parent structure with different classes in C++
我决定用自己的简单引擎制作下一个游戏。我已经为对象渲染、物理等编写了一些代码,现在我正在考虑如何轻松地将它们连接在一起。
我想用一个主对象建立层次结构,让我们称之为场景,它将有作为精灵或交互对象的父对象,每个精灵或交互物体都可以有自己的子对象,也有自己的孩子。。我想你已经明白我的意思了:)
让我们假设,每个对象类型都将继承自某个基本对象,例如,我们将其称为Node。我还不确定Node是否是"真实"的对象,它会有自己的大小、位置等,或者只是游戏中每个对象的抽象包装器(实际上我倾向于选择第二个)。
最后。我的目标是,拥有实际场景的对象,调用类似Scene->Move(x,y)的东西,它会移动场景的每个子对象(或精灵、交互对象等)。或者Scene->Render(),它会渲染每个(可渲染的)子对象。如果我创建Sprite,我想添加类似Sprite->addChild()的子对象,并且子对象可以是另一个Sprite、InteractiveObject或只是简单的Node。
现在是我的问题。用C++实现它的最佳方法是什么?还是我完全错了,这种结构很愚蠢?:)
我应该认为,结构是否合理在一定程度上取决于您真正想要实现的目标——系统听起来非常灵活,但通常在灵活性和性能之间存在权衡。根据游戏的类型,性能可能很难获得。
此外,如果所有的东西都派生自某个BaseNode,那么它们都需要(尽管可能是空的)用于所有类型的东西的方法,无论它们是否真的可以被渲染、移动等等。或者你最终会得到很多dynamic_casts,这也不是很好。因此,最好稍微减少灵活性,并区分游戏实体和图形实体,后者是前者的一部分(不过,您可能希望允许游戏实体由多个图形实体或子实体组成)。
如果你使用当前的体系结构,我应该认为每个BaseObject都有一个向量,当你对主对象调用render()时,它会遍历它的所有子对象,并对它们调用render。它们执行相同的操作,并执行任何适合它们的渲染代码。
然而,另一个问题是,一个对象是否可以连接到其他几个对象上(例如,如果渲染和物理之间存在差异)。如果是这样的话,除非你不使用普通的BaseObject*,而是使用某种形式的auto_ptr或shared_ptr,否则知道何时删除对象可能会很麻烦。
我希望这个答案能对你有所帮助,尽管我意识到这不是一个简单的"这就是他们的方式!"。
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- 访问不同类的私有结构体成员
- C++中具有不同类的子/父结构
- 如何使用谷歌测试测试实现接口的不同类/结构
- 不同类中相同结构定义的二进制兼容性
- 具有相同类层次结构的C++数组
- 如何锁定由属于两个不同类的两个线程修改的数据结构