2006-04-17
由于之前碰到一个问题一直没有静下心来思考如何解决,这次赶在冲凉之前决定好了。
问题就是如何解决对象删除的问题。
1> 我有一个存放对象的地方,其ID与对象进行了关联
2> 我把游戏操作方法作了几个分类.有专门处理显视次序的数组(有序)、有专门存放炸弹的数组(有序)、有专门存放背景的数组(有序)、有专门存放玩家的数组(有序)。
而当一个对象被删除的时候要同时把上面相关的联系都给切断。
1. 最直观的解决方案就是在对象的析构函数中触发一次事件(类似于函数指针啦)
2. 还有一种就是由管理器进行对象删除的方式,当决定某个对象死亡的时候,标记它为死亡。在排序的时候,死亡列为最高指标,其它则以X,Y做为排序关键字。最终标记为死亡的对象就会自动走到排序队列的最前面。删除的时候只需要做线性删除即可。
现决定使用第二种方式删除游戏对象,使得WORLD中的定义就好象这样:
Map<int, CGameObject *> m_gameObjs; //游戏对象
Vector<CGameObject *> m_showObjs; //游戏显视队列
Vector<CGameObject *> m_bgObjs; //背景
Vector<CGameObject *> m_collisionObjs; //碰撞物体
Vector<CGameObject *> m_playerObjs; //玩家
List <int> m_deleteObjID; // 本次删除对象的 ID 列表