C++ 动态实体是一个好的设计吗?

C++ 动态实体是一个好的设计吗?,c++,C++,为了我的比赛 所有东西都从实体继承,然后其他东西,如播放器、PhysicsObject等,都从实体继承。物理引擎将具有实体*的碰撞回调发送到A发生碰撞的B。然后,假设A是一颗子弹,A尝试将该实体作为玩家进行投射,如果成功,则会降低玩家的生命值 这个设计好吗 谢谢我相信信息系统更适合你的“世界” 在这种情况下,您既不需要动态强制转换,也不需要检查动态强制转换的结果 更新,以下是一个示例: target->send(M_COLLECT, pMushroom); ... Person::han

为了我的比赛

所有东西都从实体继承,然后其他东西,如播放器、PhysicsObject等,都从实体继承。物理引擎将具有实体*的碰撞回调发送到A发生碰撞的B。然后,假设A是一颗子弹,A尝试将该实体作为玩家进行投射,如果成功,则会降低玩家的生命值

这个设计好吗


谢谢

我相信信息系统更适合你的“世界”

在这种情况下,您既不需要动态强制转换,也不需要检查动态强制转换的结果

更新,以下是一个示例:

target->send(M_COLLECT, pMushroom);
...

Person::handle(uint message, Entity* the_thing)
{
  switch(message) 
  {
    case M_COLLECT: this->things.push( the_thing ); 
                    the_thing->send(M_COLLECTED_BY, this); break;
  }
}
Entity::handle(uint消息,Entity*事物)
实现可以包装到 MSG\u MAP\u START、MSG\u MAP\u END和HANDLE\u MSG(MSG)宏,使您的代码如下所示:

MSG_MAP_START

   HANDLE_MSG(M_COLLECT)
   {
     this->things.push( the_thing ); 
     the_thing->send(M_COLLECTED_BY, this);
   }
   HANDLE_MSG(M_COLLECTED_BY) 
   {
     ...
   }
   ...
MSG_MAP_END
这可能有许多变化


顺便说一下,Objective-C在语言中内置了这种消息传递。用非常难看的符号,但仍然

我相信信息系统更适合你的“世界”

在这种情况下,您既不需要动态强制转换,也不需要检查动态强制转换的结果

更新,以下是一个示例:

target->send(M_COLLECT, pMushroom);
...

Person::handle(uint message, Entity* the_thing)
{
  switch(message) 
  {
    case M_COLLECT: this->things.push( the_thing ); 
                    the_thing->send(M_COLLECTED_BY, this); break;
  }
}
Entity::handle(uint消息,Entity*事物)
实现可以包装到 MSG\u MAP\u START、MSG\u MAP\u END和HANDLE\u MSG(MSG)宏,使您的代码如下所示:

MSG_MAP_START

   HANDLE_MSG(M_COLLECT)
   {
     this->things.push( the_thing ); 
     the_thing->send(M_COLLECTED_BY, this);
   }
   HANDLE_MSG(M_COLLECTED_BY) 
   {
     ...
   }
   ...
MSG_MAP_END
这可能有许多变化


顺便说一下,Objective-C在语言中内置了这种消息传递。用非常难看的符号,但仍然

太让人困惑了,我不知道该在哪里发帖:(太让人困惑了,我不知道该在哪里发帖:(子弹是如何设置生命值的?
bool handled=target->send(M_HIT_BY,pBullet)
每个目标对M_HIT_的处理方式不同。例如,玩家会减少生命计数器。消息传递的一般想法是,你有一个松散耦合类型的系统。如果明天你需要像M_CHARMED_BY这样的东西,你只需要更改Belle类(发送者)和,比如说,玩家(潜在接收者)。代码中的所有其他类和位置都不需要更改。如果玩家需要拾取项目,那么传递数据的情况如何处理?(除了投射指针)谢谢,但我的意思是,如果玩家需要实体的投射版本(如武器),该怎么办,是否适合动态施放?子弹是如何设置生命值的?
bool handled=target->send(M_HIT_BY,pBullet)
每个目标对M_HIT_的处理方式不同。例如,玩家会减少生命计数器。消息传递的一般想法是,你有一个松散耦合类型的系统。如果明天你需要像M_CHARMED_BY这样的东西,你只需要更改Belle类(发送者)和,比如说,玩家(潜在接收者)。代码中的所有其他类和位置都不需要更改。如果玩家需要拾取项目,那么传递数据的情况如何处理?(除了投射指针)谢谢,尽管我的意思是,如果玩家需要实体的铸造版本(如武器),那么是否适合动态投射?