我正在编写一个C++/SDL/OpenGL应用程序,我遇到了最奇怪的错误.通过简单的可变时间步长,游戏似乎运行良好.但随后FPS开始表现得很奇怪.我发现Sleep(1)和SDL_Delay(1)都需要15 ms才能完成.
在0-15之间的任何输入都需要15ms来完成,将FPS锁定在大约64.如果我将其设置为16,则需要30 MS OO
我不知道为什么会这样.这是我遇到过的最奇怪的错误.
我的循环看起来像这样:
while (1){
GLuint t = SDL_GetTicks();
Sleep(1); //or SDL_Delay(1)
cout << SDL_GetTicks() - t << endl; //outputs 15
}
Run Code Online (Sandbox Code Playgroud)
它应该很少花费1ms,但大部分时间需要15ms.
我的操作系统是Windows 8.1.CPU是intel i7.我正在使用SDL2.任何想法都会受到赞赏,因为我一无所知.
我试图做一个间隔树的粗略抽象实现,但我得到一个奇怪的错误.我返回a的所有函数std::map<ui16, Node>::iterator都给出了错误:
错误C2146:语法错误:缺少';' 在标识符"FOO"之前
FOO函数的名称在哪里.
ui16简直就是一个typedef unsigned short.
有任何想法吗?
#include "stdafx.h"
#include <map>
//Very rough implementation of a specialized interval tree
//TODO: Replace std::map with a custom red-black tree implementation or something similar
template <typename T>
class IntervalTree {
public:
struct Node {
Node(T Data, ui16 Length) : data(Data), length(Length) {}
T data;
ui16 length;
};
inline void clear() {
std::map<ui16, Node>().swap(_tree);
}
inline std::map<ui16, Node>::iterator getInterval(ui16 index) const {
auto it = _tree.lower_bound(index); …Run Code Online (Sandbox Code Playgroud)