gpt4 book ai didi

c++ - SDL 事件循环退出?

转载 作者:太空狗 更新时间:2023-10-29 20:05:06 25 4
gpt4 key购买 nike

我正在使用 SDL 为图形制作 C++ 中的 RTS。

每次我运行游戏时,它都会在编译器调试窗口中无错误或任何内容地崩溃。它不会立即或持续崩溃,有时需要 10 秒才能崩溃,有时需要 2 分钟才能崩溃。

当我尝试使用返回值(在 main 函数的末尾)时,发现它并没有崩溃,而是退出了,因为返回值与我更改的值一致。

我的唯一理论是我的轮询事件循环出现故障并告诉程序在不应该退出时退出。

这是我的事件循环,包含在我的游戏循环中:

    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;
}
}

是否有可能当鼠标移动或单击时,将其混淆为退出?我也不认为 ram 过载,因为它只显示它需要的平铺方式。

是否也有可能是我的编译器 VisualC++ 搞砸了?

最佳答案

如何将代码段末尾的开关更改为:

if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE) {
quit = true;
}

因为在你的代码中你检查了所有事件的键符,所以当你测试它是否是转义时,通常事件的类型是错误的,并且你得到键符的“垃圾”值,有时它与 ESC 匹配。


实际上用 switch 测试 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
}

关于c++ - SDL 事件循环退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15272089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com