动态演员是否合适?

时间:2011-06-18 14:14:36

标签: c++

在游戏中说,我们有实体互相沟通。假设玩家与物品碰撞,现在该物品应该放在他的std::vector<Item*>

当玩家收到碰撞消息时,他将该项目作为实体*接收。那么玩家是否适合将其作为项目投射,如果投射成功,则将项目推入库存?

即使游戏向他发送了HIT_ITEM消息,他仍然需要投射它以将其推入。

由于

4 个答案:

答案 0 :(得分:2)

如果你能为自己满意地回答这些问题,那么是的。

  • 为什么玩家会收到与实体*而不是项目*的碰撞消息?
  • 在潜在演员阵容中,你确定它会是动态类型的项目吗?如果不是怎么办?
  • 有没有什么方法可以相对轻松地重新设计代码以避免演员表?

无论如何,不​​要教条。如果在目前的情况下,一个垂头丧气比其他东西更方便,那就去做吧。 IMHO

答案 1 :(得分:2)

dynamic_cast可帮助您在执行向下转换时检查有效性。

如果无法安全地下载指针或引用,则返回NULL或抛出异常(std::bad_cast用于引用)。

除非你向我们展示班级结构,否则不清楚。

答案 2 :(得分:0)

您应该问自己的主要问题是 - 我可以将其作为实体的虚拟功能吗?在这种情况下,我可能会说“不”,因为非物品无法了解或关心你将如何处理物品。因此,dynamic_cast可能是正确的解决方案 - 您可以安全地处理null回来的情况,并使其他派生类不必了解有关Item的任何内容。

答案 3 :(得分:-1)

如何将类型成员与GetType()函数一起添加到基类?这就是我通常解决这些“铸造”问题的方法。

此外,如果您打算使用dynamic_cast,请不要忘记打开RTTI(请忽略它,这很明显)。