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/

相关文章:

visual-studio - 在 Visual Studio 中作为原子操作插入条件断点(这样在设置条件之前它不能触发)

visual-studio-2013 - 在Visual Studio 2013中保持文档打开

c# - 通用类型检测

c++ - unique_ptr 和 shared_ptr 的区别

c++ - 在 visual studio 中 boost .ipp 文件支持

c++ - C/C++ — 使用 __funcsig__ 宏来获取函数签名?

c++ - 具有不同返回类型的函数变体

c++ - 如何修改数据报原始TCP IP?

c++ - 链接 : error LNK2001: unresolved external symbol _WinMainCRTStartup

c++ - unique_ptr 编译器错误,因为将代码从 VS2013 预览导入到 VS2012