gpt4 book ai didi

c - 如果未按下鼠标/键,SDL2 程序将停止

转载 作者:太空宇宙 更新时间:2023-11-04 07:57:15 34 4
gpt4 key购买 nike

我正在使用 C 语言编写贪吃蛇游戏,使用的是 SDL2。我试图让蛇在一段时间后(500 毫秒左右)移动,并且我有一个时钟来计算程序运行时耗时而没有完全停止游戏(而不是使用 SDL_Delay 来做到这一点).

这是函数:

float relogio (float segundos)
{
clock_t start = clock();
clock_t end = clock();
float sec = (float)(end - start) / CLOCKS_PER_SEC ;
sec=sec*1000+ segundos; //total time in seconds
//printf("sec: %.02f\n", sec );

return sec;
}

在 main.c 中

if(segundos>= delay) //delay is a variable. right now is at 0.5
{
segundos=0;
moves(cobra, janela);
}

好的,所以我的问题是,除非我的鼠标在 SDL 窗口内移动或者我正在按键,否则“无限”循环(直到变量 end_game=0)会在一段时间后停止。我可以在终端中看到这一点,因为如果一段时间后我没有做任何事情,我在循环开始时的 printf 就会停止。

即使我没有在窗口中做任何事情或按键,我怎样才能让程序继续工作?

我希望我说清楚了,这是我在 main 函数中的 while 循环的片段:

while(end_game==0)
{
printf("ciclo\n" ); // after a while this printf stops print and restarts if I press any key or move my mouse

//sdl related functions

segundos=relogio (segundos);

if(segundos>= delay)
{
segundos=0;
//activates function that makes snake move a block in a certain direction
}
SDL_RenderPresent(g_pRenderer);
}

编辑

void game_end int *end_game, int mouse[])
{


float l3 = 0.025 * LARG +120;
float l4 = 0.025 * LARG +200;
float sup = 0.2 * AC;
float inf= 0.8 * AC;


if(mouse[X] > l3 && mouse[X] < l4 && mouse[Y] > sup && mouse[Y] < inf)
{
*end_game = 1;
game_over(); // this function quits SDL and all closes everything there is to close
}

}

最佳答案

您用来存储事件的函数 SDL_WaitEvent() 会等待直到提供输入。这意味着如果没有提供输入,该函数将等待输入。换句话说,在您为此函数提供输入之前,不会执行后面的代码。

您想要的是一个不会阻塞程序的函数。在 SDL 中这样做的适当函数是 SDL_PollEvent() .当没有给出输入时,此函数不会等待输入,而是返回 0。

关于c - 如果未按下鼠标/键,SDL2 程序将停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49184912/

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