在游戏中说,我们有实体互相沟通。假设玩家与物品碰撞,现在该物品应该放在他的std::vector<Item*>
当玩家收到碰撞消息时,他将该项目作为实体*接收。那么玩家是否适合将其作为项目投射,如果投射成功,则将项目推入库存?
即使游戏向他发送了HIT_ITEM消息,他仍然需要投射它以将其推入。
由于
答案 0 :(得分:2)
如果你能为自己满意地回答这些问题,那么是的。
无论如何,不要教条。如果在目前的情况下,一个垂头丧气比其他东西更方便,那就去做吧。 IMHO
答案 1 :(得分:2)
dynamic_cast
可帮助您在执行向下转换时检查有效性。
如果无法安全地下载指针或引用,则返回NULL
或抛出异常(std::bad_cast
用于引用)。
除非你向我们展示班级结构,否则不清楚。
答案 2 :(得分:0)
您应该问自己的主要问题是 - 我可以将其作为实体的虚拟功能吗?在这种情况下,我可能会说“不”,因为非物品无法了解或关心你将如何处理物品。因此,dynamic_cast
可能是正确的解决方案 - 您可以安全地处理null
回来的情况,并使其他派生类不必了解有关Item的任何内容。
答案 3 :(得分:-1)
如何将类型成员与GetType()函数一起添加到基类?这就是我通常解决这些“铸造”问题的方法。
此外,如果您打算使用dynamic_cast,请不要忘记打开RTTI(请忽略它,这很明显)。