Bla*_*ren 3 c++ sdl visual-c++
我正在使用SDL为图形制作C++中的RTS.
每次我运行游戏时,它都会在编译器调试窗口中无错误地崩溃.它不会立即或持续崩溃,有时需要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;
}
}
Run Code Online (Sandbox Code Playgroud)
当鼠标移动或点击时,它是否有可能让它退出?我不认为ram是否超载,因为它只显示它需要的瓦片.
我的编译器VisualC++是否也可能搞砸了?
如何将代码段末尾的开关更改为:
if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE) {
quit = true;
}
Run Code Online (Sandbox Code Playgroud)
因为它可能只是,在你的代码中检查所有事件的keysym,所以当你测试它是否为escape时,通常是错误类型的事件,并且你获得keysym的"垃圾"值,有时它与ESC匹配.
实际上测试event.type带开关可能是个好主意:
switch(event.type) {
case SDL_MOUSEMOTION:
//....
break;
case SDK_KEYDOWN:
switch(event.key.keysym.sym) {
case SDLK_ESCAPE:
quit = true;
break;
// cases for other keypresses
}
break;
// cases for other events
}
Run Code Online (Sandbox Code Playgroud)