gpt4 book ai didi

c++ - 使用 bool* : all values appear to be set to ints at second initialisation. 管理的 OpenGL/GLUT 键盘有什么想法吗?

转载 作者:太空狗 更新时间:2023-10-29 23:47:15 24 4
gpt4 key购买 nike

使用 OpenGL/GLUT 和 C++ 制作游戏。

我听说在 GLUT 中管理键盘内容的最简单方法是使用 bool 数组。

基本上,这就是我所拥有的:

bool* keys = new bool[256];

...

void keyDown(unsigned char ch, int x, int y)
{
keys[ch] = true;
}

void keyUp(unsigned char ch, int x, int y)
{
keys[ch] = false;
}

然后如果我想知道一个键的状态,我只需要返回 keys[key]。

我对特殊键有类似的设置。现在,在我的游戏中,当你死后,它会重置所有需要重置的值并重新开始游戏。直到刚才,包括

keys = new bool[256];

和特殊键数组的类似声明。对我来说没有意义的是,偶尔,这种假定的数组重置会导致键中的部分或全部值变成两位或三位整数(因此总是评估 true 并使玩家角色无法控制地移动直到一个或更多明显按下的键被按下了)。我怀疑发生这种情况是因为在残局时按下了其中一个键,从而在 C++ 试图使整个数组为假并发现一件事被卡住时混淆了 C++。

伙计,这令人困惑。据我所知,这个问题已经通过消除所有额外的键初始化来解决。但我不明白。有人知道我是如何设法将一些 bool 值变成整数的吗?

最佳答案

这个声明

keys = new bool[256];

分配内存。它不会将该内存初始化为任何特定值。为此,您可以执行 memset(keys, 0, sizeof(bool) * 256)归零。

但是,您不应该分配内存(new 所做的)来重新初始化数组。你应该实际上重新初始化它,使用memset或者您使用“假”值初始化它的任何功能。

最后,为什么要用 new 分配这个数组?开始?只需将其设为全局数组即可:bool keys[256] .在使用之前初始化它(使用 memset ),一切都会好起来的。

我会建议 std::vector<bool> ,但遗憾的是,这些都无法使用。你可以使用 std::vector<char>但是,0 表示错误。或者 std::bitset有 256 位。所有这些都在内部包含它们的分配(因此是安全的),并且有办法将它们的内存清除为某个值。

making a game with OpenGL/GLUT and C++.

顺便说一句,我不建议这样做。 GLUT 不是专为大多数游戏所需的计时类型而设计的工具。 GLFW 允许您控制主循环,而不是使用回调,因此它是更适合游戏的工具。

关于c++ - 使用 bool* : all values appear to be set to ints at second initialisation. 管理的 OpenGL/GLUT 键盘有什么想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6554771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com