我正在C++中使用SDL为图形制作RTS。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++是否也可能搞砸了?
我认为这是好的。在你的代码中没有真正的问题。我们需要更多的代码。如果你认为如果混淆(如果其他人是你的朋友)并且使用printf或者debug或者其他的debug来查看,如果在你的if(event.type == SDL_QUIT)中输入 – 2013-03-07 13:20:42
设置断点,看看你是否真的得到SDL_QUIT消息 – 2013-03-07 13:27:40
我想你可能会溢出一个缓冲区或堆栈中的东西,深入你的函数调用图中,并且事件结构被破坏。有时,偶然的'event.type'恰好得到'SDL_QUIT'的值,程序退出。 – rodrigo 2013-03-07 13:30:49