在游戏循环中暂停游​​戏


12

在游戏循环内,通过按P暂停游戏,这意味着游戏循环不再运行。问题在于,该循环暂停后,由于它位于循环本身内部,因此无法再次按下P以恢复该循环。如何使其再次按下P时使循环再次工作?

Answers:


20

暂停游戏时,实际上不要停止游戏循环。相反,您必须添加bool变量,该变量会根据游戏是否暂停而更改为true / false。如果游戏暂停,则仅需停止更新游戏,但仍可以继续渲染当前帧,包括从输入中获取更新。

if(gameIsPaused == false)
{
    // run updates
}
checkInput();
render();

您可能希望对checkInput暂停模式和非暂停模式具有不同的功能,因为可能会有一些控件仅在一种模式或另一种模式下可用。checkInput暂停模式的功能可能不外乎看是否P按下然后设置gameIsPaused = false,但是有些游戏还在暂停屏幕上添加了附加功能(在90年代,将暂停屏幕作为作弊代码的隐藏输入颇为流行,现代游戏喜欢将其与菜单屏幕结合在一起)。
菲利普

1
虽然我通常会同意您的回答,但我认为应该明确指出,有时在暂停状态下运行某些更新是完全有效的。例如,为菜单项设置动画或进行一些音频管理。最大的想法是,在暂停状态下,您可以分支到另一组checkInput/ render/ update调用。
Nicholas Miller

暂停游戏的唯一更改应该是跳过“更新世界”位。所有其他功能可能应该保持正常。
Mooing Duck 2015年

4
我试图使答案尽可能简单,因为这是游戏编程中非常基本的内容,而且我也不想混淆发问者。
卡图2015年

1
@ user3730788:每个游戏循环执行一次(即每秒少于100次)的分支不会对性能产生明显的影响,即使每次都被错误预测也是如此
Ilmari Karonen 2015年

1

使其按P切换到另一个处理游戏状态“已暂停”的循环,并允许再次按P切换回原始游戏循环。

实际上,您可以将所有内容放入游戏循环本身,并引入状态变量(如果需要),而不是关闭循环,状态变量可以在循环内执行各个特定于状态的代码之间切换。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.