为什么函数SDL_WaitEvent(SDL2)在我的代码中出错?

我正在使用Doom之类的引擎,有时会检测到一个错误,segfault有时是一个sig abort,有时我们也会遇到此错误:

  

线程已经在初始化此类!

我使用了lldb,它表明函数WaitEvent出现错误。 SDL_Event事件是通过此函数初始化的,有些我不知道该如何初始化。

void    ft_init_sdl(t_var *var)
{
    var->sdl.window = NULL;
    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) < 0)
        return ;
    var->sdl.window = SDL_CreateWindow("DOOM",SDL_WINDOWPOS_CENTERED,\
            SDL_WINDOWPOS_CENTERED,SIZE_X,SIZE_Y,0);
    var->sdl.render = SDL_CreateRenderer(var->sdl.window,-1,1);
    if (!var->sdl.window || !var->sdl.render)
        return ;
}

SDL_WaitEvent在这里被称为

void    display(t_var *var)
{
    sdl_clean_screen(var->sdl.render);
    neo_display(var);
    while (SDL_WaitEvent(&var->sdl.event))
    {
        if (var->sdl.event.type == SDL_QUIT)
            ft_clean_quit(var->sdl.render,var->sdl.window);
        else if (var->sdl.event.key.keysym.sym == SDLK_ESCAPE)
            ft_clean_quit(var->sdl.render,var->sdl.window);
        else if (var->sdl.event.type == SDL_KEYDOWN)
        {
            if (var->sdl.event.key.keysym.sym == SDLK_d)
            {
                var->player.angle += 6;
                var->player.pcos = cos(var->player.angle * RAD);
                var->player.psin = sin(var->player.angle * RAD);
                sdl_clean_screen(var->sdl.render);
                neo_display(var);
            }
            else if (var->sdl.event.key.keysym.sym == SDLK_a)
            {
                var->player.angle -= 6;
                var->player.pcos = cos(var->player.angle * RAD);
                var->player.psin = sin(var->player.angle * RAD);
                sdl_clean_screen(var->sdl.render);
                neo_display(var);
            }
            else if (var->sdl.event.key.keysym.sym == SDLK_w)
            {
                forward(var,4,var->player.angle);
                sdl_clean_screen(var->sdl.render);
                neo_display(var);
            }
            else if (var->sdl.event.key.keysym.sym == SDLK_s)
            {
                backward(var,var->player.angle);
                sdl_clean_screen(var->sdl.render);
                neo_display(var);
            }
        }
    }
}
linshumian999 回答:为什么函数SDL_WaitEvent(SDL2)在我的代码中出错?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3012756.html

大家都在问