2013-03-22 67 views
0

所以我无法在任何地方找到答案。 我有一个实体类,我可以在游戏中创建所有角色。例如:Player继承实体。使用从继承类到基类的方法

现在我想要做的是从实体类中调用播放器中的“更新”方法。这可能吗?因为我需要为我现在创建的每个新实体类型执行此操作:

foreach (Entity entity in entityList) { 
       if (entity is Zombie) { 
        Zombie zombie = (Zombie)entity; 
        zombie.Update(); 
       } 
       //new character here 
      } 

在此先感谢!

+0

这是C++ .NET吗? – 2013-03-22 11:06:10

+0

这是C++,我使用XNA。 – 2013-03-22 11:12:45

+0

所以它不是C++。 – 2013-03-22 11:15:27

回答

1

如果“更新”的概念适用于所有实体,则可以使UpdateEntity的虚拟功能,并让Player覆盖它。然后,Entity内部成员函数,你将只需要在特定的Entity对象上调用Update(),让调用动态分派:

foreach (Entity entity in entityList) { entity.Update(); } 

如果Update()没有意义了所有Entity S,然后让他们为虚拟函数Entity会污染该类的接口,在我看来你的选择是正确的。

如果你想避免动态downcast,你也可以考虑使用Visitor Pattern

+0

非常感谢。 :) – 2013-03-22 11:27:35

+0

@RandySchouten:很高兴帮助! – 2013-03-22 11:27:49

0

覆盖子类中的Update()方法。然后,就任何遇到的实体致电entity.Update()。这就是所谓的多态性。