gpt4 book ai didi

c++ - Qt 原始类型,与 QTimer 和 C++ 竞赛

转载 作者:太空宇宙 更新时间:2023-11-04 14:18:13 27 4
gpt4 key购买 nike

我在处理这段特殊代码时遇到了一些麻烦。它要么存在竞争条件,要么存在 quint8 问题。

quint8 chunk3[CHUNK_SIZE_MULT];
memset(chunk3,0x00, sizeof(chunk3));
for (int cx = 0; cx < CHUNK_SIZE; cx++)
for (int cz = 0; cz < CHUNK_SIZE; cz++) {
int i = cx * CHUNK_SIZE + cz;
float abs[2];
abs[0] = x * CHUNK_SIZE + lastPosX + cx;
abs[1] = z * CHUNK_SIZE + lastPosZ + cz;
int perlin = (int)(wallsPerlin->Get(abs[0], abs[1])) % 8;
chunk3[i] = perlin > 6 ? perlin : 0;//(int)(sin(i) + 1.0 * 32.0);
}

如果我使用 chunk3[i] = 0 或 30 或 i % 30,它会正常工作。但是,当我引入 sin 函数、rand 函数或 perlin 噪声时,它会抛出内存错误。我认为这可能是从 double 到 char 的转换,但现在看来不太可能。

谁能澄清这是否与 quint8 或时序有关?

如果使用一个QTimer interval来调用上面的代码和OpenGL相关的函数,QTimer会不会触发一个事件而没有完成前一个事件?

如果是这样,我如何使用 Qt 更好地构建我的游戏循环?使用 usleep?

编辑:我现在看到这不是时间问题,因为离开 perlin 并打印它,但将 chunk3[i] 设置为固定的 30 可以正常工作。

编辑:将 int 转换为 quint8 似乎无法解决问题。

最佳答案

        quint8 perlin = (quint8)((int)(wallsPerlin->Get(abs[0], abs[1])) % 8 + 8);

已修复。

关于c++ - Qt 原始类型,与 QTimer 和 C++ 竞赛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591305/

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