c++游戏编程(1)
今天读c++游戏编程其中有一段:
"假如有20个不同敌人,5个不同类型的老板,而且本关里需要为每一个敌人调用ExecuteFrame()函数一次,则需要跟踪每一个敌人的类型。这意味着需要一个list保存每一种类型的敌人和老板,然后反复遍历这个链表。每当增加一个新类型时,都得记住增加一个链表,然后遍历它,这样做显然太啰嗦了。"
开始没能理解作者意思,让我郁闷的一会。后来想想作者的大意可能是:
首先: class Enemy{};//敌人类 class Boos : public Enemy {};//boss类
假设现在有 class EnemyA:public Enemy{}; class EnemyB :public Enemy{};
在写程序时:list<EnemyA*> listA; list<EnemyB*> listB;list<Boss> listBoss;
每创建一个EnemyA 或EnemyB或Boss对象时,将其对象放入相应list。然后可能在遍历时依次调用ExecuteFrame()此函数不是虚函数。
如果新加一个EnemyC类型时就得增加一个相应的list<EnemyC*>对象;未免不够灵活。
改进:将ExecuteFrame定义为虚函数,然后只要定义一个list<Enemy*>即可,把继承与Enemy的类的对象都放到此list中,然后可能在遍历时调用ExecuteFrame().就算增加新的敌人类型或老板类型,也可直接放入次链表,维护起来很方便。
最后作者引入了虚函数的知识。