C++ 如何在游戏中的不同时间有效地渲染不同的东西?

C++ 如何在游戏中的不同时间有效地渲染不同的东西?,c++,C++,很抱歉标题不明确。我想知道的是,在主菜单、选项菜单和“游戏中”之间交替渲染的有效方法是什么 到目前为止,我提出的仅有两种方法是使用1个渲染函数,每个部分(菜单,…)都有代码和一个变量来控制绘制的内容,或者使用多个渲染函数,使用函数指针指向相应的函数,然后只调用函数指针 我总是想知道更多的专业游戏是如何做到这一点的 尝试使用状态机/策略OOP模式。游戏应用程序处于不同的状态,呈现不同的内容,在您玩游戏和与菜单交互时,对键盘/鼠标输入的反应也不同 如果控件表示为类,则使用polymorhic API

很抱歉标题不明确。我想知道的是,在主菜单、选项菜单和“游戏中”之间交替渲染的有效方法是什么

到目前为止,我提出的仅有两种方法是使用1个渲染函数,每个部分(菜单,…)都有代码和一个变量来控制绘制的内容,或者使用多个渲染函数,使用函数指针指向相应的函数,然后只调用函数指针


我总是想知道更多的专业游戏是如何做到这一点的

尝试使用状态机/策略OOP模式。游戏应用程序处于不同的状态,呈现不同的内容,在您玩游戏和与菜单交互时,对键盘/鼠标输入的反应也不同

如果控件表示为类,则使用polymorhic API
render
可以解决此问题。根据对象(菜单类型)进行相应的渲染

class UIObject
{
public:
  virtual bool render() = 0;
  ~UIObject(){}
};

class MainMenu : pu{
public:
  virtual bool render()
  { //rendering for main menu
  }
 };
class OptuionMenu
{
public:
  virtual bool render() { //render for option menu}
};

如果你想做对的话,这就有点复杂了。
首先,我创建一个
CScreen
类,它是所有屏幕的基类。它是一个抽象类(使用纯虚拟函数),有两个函数:Render和Update。然后,我在我需要的更多屏幕中导出它,例如
CMainMenuScreen、copionscreen、CCreditsScreen、CGameScreen等
。让这些课程中的每一个都处理好自己的东西。在每一个菜单中,您都有一个界面,然后当按下主菜单屏幕中的选项按钮时,您将屏幕更改为
copionsScreen
。为此,您只需在某个地方保留一个变量
CScreen screen
,并在每个帧调用
screen->Update()和screen->Draw()
记住,如果您不使用指针,请进行调整(我建议这样做很难)

我提供的游戏,已经售出了大量副本,拥有状态机并使用
开关
语句来选择适当的功能。虽然表面上不如“OOP”状态机灵活,但它比我后来遇到的OOP设计要容易得多

实际上,只有一个渲染函数可能是合适的,但该函数不应该知道它在做什么。它将有3D和2D通行证(至少对于3D游戏来说,因为即使是那些通常也有2D UI元素),但它不需要知道游戏处于什么“模式”

神奇之处在于UpdateMainMenu、UpdateName或UpdateInGameMenu函数,以及与切换状态相关的启动和停止函数。使用枚举上的switch语句选择哪个,并在两个位置使用它,切换状态(一个开关用于停止旧状态,另一个开关用于启动新状态)和更新


当我写到我的警钟响起时,这是一个使用OOP的绝佳机会,但根据经验,我建议不要这样做。你不想最终陷入这样的境地:你有一百万个州来来去去去;您希望将其约束到主要的“运行模式”,并且这些模式中的每一个都应该能够对告诉它显示什么的数据进行操作。例如,整个游戏内菜单的一种状态,“加载”数据(通常是“更新其指向数据的指针”),以指示当前屏幕的行为。没有什么比拥有一百个微类而不知道何时触发哪个更糟糕的了,更不用说这种设计经常会产生重复的逻辑(游戏开发人员非常不擅长通过重构减少重复)。

我理解你的意思,但由于某种原因,我不知道如何调用每个渲染函数。我知道怎么用语法表达,但你的意思是。。if(GameState==MainMenu)//调用某个重载方法?