C++中同一对象的实例(游戏编程)
Instances of the same object in C++ (game programming)
我想知道如何在 C++ 中创建同一对象的多个实例。我有一个例子。假设我正在创建一个简单的动作游戏,并且我有一个名为 "Bullet" 的对象。如果我点击 f.e。 CTRL 键会引起枪声。所以我创建了一个 Bullet 实例。当子弹击中某物或脱离 window 时实例死亡。但是,如果我有 f.e 怎么办?机枪之类的东西。它可以连续发射多发子弹。所以我必须创建许多 Bullet 实例,但我该怎么做呢?我是不是应该在开始的时候做一个这样的指针
Bullet *pointer;
然后,当我想创建一个子弹实例时,我在内存中为一个 "bullet" 分配了一个 space。当我想创建下一个项目符号时,我会分配更多 space 等等。但是当一颗子弹"dies"我在记忆中得到了一个死space...
所以我不知道如何处理这种情况。我是 OOP 的新手。我用 C 编程,现在我想通过游戏编程学习 C++(这很有趣):-)。感谢您的回答!
只需使用 std::vector<Bullet> bullets
来储存你所有的子弹。无论如何,您将需要所有这些对象,std::vector
将:
- 摊销追加新对象
- 允许您
shrink_to_fit
如果矢量在任何时候变得太大
- 允许您在开始时
reserve
一定数量的元素,有效地创建一个空的对象池
- 保持所有对象连续,使一切都非常高效
您可能还想尝试 std::unordered_map
,它的插入和删除时间几乎恒定。
我想知道如何在 C++ 中创建同一对象的多个实例。我有一个例子。假设我正在创建一个简单的动作游戏,并且我有一个名为 "Bullet" 的对象。如果我点击 f.e。 CTRL 键会引起枪声。所以我创建了一个 Bullet 实例。当子弹击中某物或脱离 window 时实例死亡。但是,如果我有 f.e 怎么办?机枪之类的东西。它可以连续发射多发子弹。所以我必须创建许多 Bullet 实例,但我该怎么做呢?我是不是应该在开始的时候做一个这样的指针
Bullet *pointer;
然后,当我想创建一个子弹实例时,我在内存中为一个 "bullet" 分配了一个 space。当我想创建下一个项目符号时,我会分配更多 space 等等。但是当一颗子弹"dies"我在记忆中得到了一个死space...
所以我不知道如何处理这种情况。我是 OOP 的新手。我用 C 编程,现在我想通过游戏编程学习 C++(这很有趣):-)。感谢您的回答!
只需使用 std::vector<Bullet> bullets
来储存你所有的子弹。无论如何,您将需要所有这些对象,std::vector
将:
- 摊销追加新对象
- 允许您
shrink_to_fit
如果矢量在任何时候变得太大 - 允许您在开始时
reserve
一定数量的元素,有效地创建一个空的对象池 - 保持所有对象连续,使一切都非常高效
您可能还想尝试 std::unordered_map
,它的插入和删除时间几乎恒定。