如果您曾经使用过 XNA game studio 4,您就会熟悉更新方法。默认情况下,其中的代码每秒处理 60 次。我一直在努力在 C++ 中重新创建这样的效果。
我想创建一个方法,它每秒只处理代码 x 次。我尝试过的每一种方式都像循环一样一次性处理。我已经尝试过 for
循环、while
、goto
,所有的事情都同时处理。
如果有人能告诉我如何以及如果我能在 C++ 中实现这样的事情,我将不胜感激。
最佳答案
以你目前的知识水平,这是我能得到的最具体的:
你不能用循环、fors、ifs 和 gotos 做你想做的事,因为我们已经不在 MS-DOS 时代了。
您也不能让代码以每秒 精确 60 帧的速度运行。
在 Windows 上,系统应用程序在称为“事件循环”的东西中运行。
通常,在事件循环中,大多数 GUI 框架会调用“onIdle”事件,该事件在应用程序无所事事时发生。
您从 onIdle 事件中调用更新。
您的 onIdle() 函数将如下所示:
void onIdle(){
currentFrameTime = getCurrentFrameTime();
if ((currentFrameTime - lastFrameTime) < minUpdateDelay){
sleepForSmallAmountOfTime();//using Sleep or anything.
//Delay should be much smaller than minUPdateDelay.
//Doing this will reduce CPU load.
return;
}
update(currentFrameTime - lastFrameTime);
lastFrameTime = currentFrameTime;
}
您将需要编写自己的更新函数,您的更新函数应该记录自上一帧以来耗时,并且您需要使用 GetTickCount、QueryPerformanceCounter 或一些类似函数编写 getFrameTime() 函数。
或者,您可以使用系统计时器,但与 onIdle() 事件相比,这是一个坏主意 - 如果您的应用运行速度太慢。
总之,你的路还很长。
你需要学习一些(最好是跨平台的)GUI框架,学习如何创建窗口,事件循环的概念(今天没有它什么都做不了),然后写你自己的“update() "并了解多线程编程和系统事件的基本概念。
祝你好运。
关于c++ - 在 C++ 中创建具有自定义速率处理的更新方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30886774/