对于我正在研究的2D游戏,我已经制作了一个指向对象的指针。此对象是所有其他游戏对象继承的父类。所以actor就是这样一个对象,物品是,敌人是等等。包含这个向量的类(对象管理器)执行这个类的虚函数,比如run()和draw()。
对我而言,这只是一个简单的实现,我当时并没有真正考虑过。现在我已经到了实际上必须从容器中删除对象的地步。在互联网上的一些快速搜索告诉我,矢量实现适合于此任务(使用交换和弹出),但我还应该将对象本身存储在向量上以获得更高的性能。所以:不是指针而是实际的实例。这样我们就可以将它们分配到堆栈中。使用继承时这是否可能?是否有更快的方式来存储继承的游戏对象?
答案 0 :(得分:3)
使用继承时甚至可以这样做吗?
不,如果不使用指针或引用,就无法在容器中存储多态对象。
我这样做的方法是std::vector
和std::unique_ptr
的组合:
template<class T> using container = std::vector<std::unique_ptr<T>>;
container<base> vector;
通过以下方式进行推送:
vector.emplace_back(std::unique_ptr<base>(new item()));
vector.emplace_back(std::unique_ptr<base>(new enemy()));
其中base
是基类,item
和enemy
是派生类。