c++ - 在 C++ 中创建具有自定义速率处理的更新方法

标签 c++ visual-c++ visual-studio-2013 xna

如果您曾经使用过 XNA game studio 4,您就会熟悉更新方法。默认情况下,其中的代码每秒处理 60 次。我一直在努力在 C++ 中重新创建这样的效果。

我想创建一个方法,它每秒只处理代码 x 次。我尝试过的每一种方式都像循环一样一次性处理。我已经尝试过 for 循环、whilegoto,所有的事情都同时处理。

如果有人能告诉我如何以及如果我能在 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/

相关文章:

c++ - 在 Windows 中获取当前注册的组织名称(公司名称)

com - 如何解决调用::UuidToString() 时出现的链接错误?

C++/CLI - 默认情况下将所有文件更改为 UNMANAGED

asp.net - VB.NET Web 窗体项目引用问题

windows - 依赖行者 : missing dlls

c++ - 在调用第二个函数之前等待整个 omp block 完成

c++ - 梯度下降算法

c++ - 在 VC++ 中将 unsigned long 转换为 int?

visual-studio - 未将对象引用设置为 Visual Studio 2013 上的对象错误实例

c++ - 有没有办法一次性设置每个字段的宽度,而不是每次都使用 streamio 设置?