繁体   English   中英

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

[英]Why the function SDL_WaitEvent (SDL2) got error in my code?

我正在像引擎那样的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, 4, var->player.angle);
                sdl_clean_screen(var->sdl.render);
                neo_display(var);
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM