我正在研究一个小型的roguelike游戏,并且任何不属于该地图一部分的对象/“事物”都基于XEntity类。有几个类依赖于它,例如XPlayer,XItem和XMonster。将基类的指针转换为继承类
我的问题是,当我知道一个对象在项目中时,我想将指针从XEntity转换为XItem。我用来拾取物品的示例代码是这样的,当不同的实体拾取它正在站立的物品时。
void XEntity::PickupItem()
{
XEntity *Ent = MapList; // Start of a linked list
while(true)
{
if(Ent == NULL) { break; }
if(Ent->Flags & ENT_ITEM)
{
Ent->RemoveEntity(); // Unlink from the map's linked list
XItem *Item = Ent // Problem is here, type-safety
// Code to link into inventory is here
break;
}
Ent = Ent->MapList;
}
}
我首先想到的是建立在XEntity的方法,其本身返回作为XItem指针,但它创建循环依赖是无法解决的。
我对这个很难过。任何帮助是极大的赞赏。
目前的做法是为了一个简单的原型。目前设计非常混乱,需要以更清晰的方式重新编写。 – 2010-03-26 20:26:18