Я делаю RTS на C++, используя SDL для графики.Завершение цикла событий SDL?
Каждый раз, когда я запускаю игру, он выходит из строя без ошибок или чего-либо в окне отладки компилятора. Это не сбой сразу или последовательно, иногда сбрасывание 10 секунд, а другое время - 2 минуты, чтобы сбой.
Когда я играл с возвращаемыми значениями (в конце основной функции), оказалось, что он не сбой, а скорее уходит, поскольку возвращаемые значения соответствуют тому, к чему я его изменил.
Единственная теория, которая у меня есть, заключается в том, что мой цикл событий опроса сжимается и говорит программе о выходе, когда это не предполагается.
Вот мой цикл событий, содержащиеся в моей игре цикла:
if(SDL_PollEvent(&event))
{
if(event.type == SDL_MOUSEMOTION)
{
mx = event.motion.x;
my = event.motion.y;
}
if(event.type == SDL_MOUSEBUTTONDOWN)
{
if(hut.getselected() && hut.getplacable())
{
hut.place(map);
}
}
if(event.type == SDL_QUIT)
{
quit = true;
}
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE: quit = true; break;
}
}
Возможно ли, что при перемещении мыши или щелчки, что это сбивает с толку его выхода? Я не думаю, что барабан перегружается либо потому, что он отображает только то, что ему нужно, чтобы сделать это.
Возможно ли, что мой компилятор, VisualC++, завинчивается?
Я думаю, что это нормально. Не проблема в коде. Нам нужно больше кода. Если вы считаете, что это сбивает с толку (если другое - это ваш друг), и используйте debug с printf или write или другое, чтобы увидеть, в каком случае, если введите –
, установите контрольную точку в вашем 'if (event.type == SDL_QUIT)' и посмотрите, действительно ли вы получает сообщение SDL_QUIT –
Я предполагаю, что вы можете переполнять буфер или что-то в стеке, в глубине вашего графика вызовов функций, а структура событий повреждена. Иногда, случайно, «event.type» получает значение «SDL_QUIT», и программа выходит. – rodrigo