C++RPG控制台游戏,用窗口基类管理各个窗口

本文讨论了在C++ RPG游戏中,使用窗口基类管理菜单、地图、商店等窗口所带来的问题,包括向下强制转换的安全性、新场景对象的重复创建以及访问数据的效率。提出了改进方案,即让GameMgr直接持有各场景的成员变量,通过get、set方法进行操作,以简化管理和提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值