У меня проблемы с этим конкретным фрагментом кода. У него либо состояние гонки, либо проблема с 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, она будет генерировать ошибки памяти броска. Я думал, что это могло быть преобразование из двойного в символ, но теперь это кажется маловероятным.
Может кто-нибудь уточнить, связано ли это с quint8 или временем?
Использует ли интервал QTimer для вызова вышеуказанного кода и функций, связанных с OpenGL, возможно ли, чтобы QTimer инициировал событие, не завершив предыдущее?
Если так, как я мог бы лучше построить свою игровую петлю с помощью Qt? Используя usleep?
РЕДАКТИРОВАТЬ: теперь я вижу, что это не проблема синхронизации, так как оставив perlin и напечатав его, но установив chunk3 [i] на фиксированное значение 30, работает нормально.
РЕДАКТИРОВАТЬ: приведение int к quint8, похоже, не решает проблему.