【发布时间】:2010-12-18 09:19:50
【问题描述】:
我有一个单例,它是我的游戏的主要引擎容器。
我有几个抽象类,可以让开发人员实现对特定对象所需的不同调用。
我想做的是让我的单例在每个给定对象上调用这些方法,但避免不必要的调用。
示例以便您更好地理解:
想象一个同时需要 Render() 和 Update() 方法的对象。
class IRender() : public IBase
{
virtual bool Render() = 0;
};
class IUpdate() : public IBase
{
virtual bool Update( long time_delta ) = 0;
};
class Sprite : public IRender, public IUpdate
{
bool Render(){ render stuff; }
bool Update( long time_delta(){ update stuff; }
};
现在我想将该 Sprite 对象添加到我的单例引擎中,但我希望引擎仅调用每个循环来调用该对象继承的任何内容(渲染和更新之外还有其他内容,例如检查输入等):
_engine::getInstance()->Add( _sprite );
事情是,为了让它工作,我必须从一个基接口继承所有接口,这样我就可以用任何创建的对象调用 Add(),所以 Add() 方法接收一个基接口对象。
现在这里的问题是基本接口必须至少抽象出所有可以继承的方法,如 Render()、Update()、CheckInput()、Etc(),并且我的单例的每个循环都必须调用所有可能性对于每个对象,即使对于 sprite 类来说 CheckInput() 为空。
就像我的单身人士一样:
bool loop(){
for every object saved in my container:
CheckInput(); Update(); Render(); etc(); }
我的设计错了吗?有什么办法可以避免这种情况吗?
我希望你明白我的意思,我的引擎处于相当先进的状态,我正在努力避免全部重写。
提前致谢。
【问题讨论】:
-
为什么不让引擎存储多个集合,每个接口类型一个集合 - vector
等?