我正在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