GameMgr中定义窗口基类指针。通过更该窗口基类的指针指向(更改为:菜单、地图、商店等窗口)实现窗口之间的转换
问题:
GameMgr是否不再直接管理菜单、地图、商店。是否还要定义其成员变量。倘或不再直接管理,如何在一个窗口中,拿到另一个窗口数据?
窗口管理为何不好:
一、GameMgr不再对map等场景进行直接管理,而是在管理其父类CWndBase:
GameMgr不再对map等场景进行直接管理,而是在管理其父类CWndBase,并将各个场景对象压入vecter<CWndBase*>容器中,这样gameMgr要调用map等场景的其他方法时,都要进行一次向下的强制转换。(向下的强制转换是不安全的)等到游戏规模变大时,我们很难预测到容器中存放的究竟是CWndBase的哪一个子类,直接的强制转换是不明智的,而遍历容器去寻找符合的子类,确保强制转换的正确性会导致每一次向gameMgr取数据都会遍历一遍容器,个人觉得会影响运行速度。且,多出了很多可能意想不到的异常
二、进入新场景时,是新建子类对象的指针,并将其压入vector<CWndBase>中。这样会导致每次进入新的场景时,都是一个全新的场景(这一点已经得到了验证)。
三、如何使用窗口管理:
窗口基类应当怎么使用:A类要对B类进行管理就应当让A类的成员变量
里面具有B类,并设置相关的get、set等函数。例如:GameMgr要对map、以及shop进行管理,就应当让GameMgr里面具有:m_gameMap和m_Shop两个成员变量并且对其进行new的操作,不需要其压入vector<wndBase>的容器中。倘若要进行渲染,则直接使用GameMgr里面的getShop的方法,获取CShop的对象。如下(GameMgr对shop进行管理):
GameMgr:
//#pragma once//避免类被重复定义
#ifndef __GAMEMGR_H__
#define __GAMEMGR_H_