我正在使用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);
}
}
}
}