gpt4 book ai didi

c++ - 暂时禁用 SDL 事件队列?

转载 作者:行者123 更新时间:2023-11-30 05:03:38 24 4
gpt4 key购买 nike

我正在制作一款老虎机游戏,我一直在解决防止多次旋转排队的问题。 spinReelsRandom() 函数启动一系列循环,在此处生成随机数。

除了玩家在旋转过程中反复按下空格键(老虎机玩家的常见做法)正在排队等待用户完成后立即进行的旋转之外,游戏现在运行完美。我想在用户第一次按下空格键开始旋转后立即忽略输入,直到 spinReelsRandom() 函数完成。

我已经尝试过的:

  • 我能够通过在主循环中使用 SDL_SetEventFilter(在下面注释掉)来获得期望的结果。我的 eventFilter 只是返回 1。但是,出于某种原因,这会阻止 SDL_Quit 工作。我猜 tp 为什么这有效是因为过滤器只返回 1 而没有事件等待轮询,因为它在事件轮询循环之外,防止用户排队旋转直到 spinReelsRandom 函数完成。如果有解释和重新启用 SDL_Quit 的方法,可能就是这样!

  • 在按下空格键后立即将过滤器移动到过程中似乎不起作用,我尝试在旋转完成后使用 SDL_SetEventFilter(NULL, NULL) 来重置事件过滤器,但是它似乎不起作用。

  • 我也尝试过使用“isSpinning”标志,该标志在卷轴旋转时翻转为真,并在启动旋转时使用检查,但一旦旋转完成后标志翻转回假,额外的轮询旋转开始。

我可以用 SDL_PeepEvents 做些什么吗?

这是初始化后的主循环,我的事件是“e”:

while (!quit)

{
while (SDL_PollEvent(&e) != 0)

{

// When an event is polled, this sets a filter to stop polling for more events until that action is completed.
// Note: This is what's stopping the repeated spins, however it has disabled the quit functionality.
// SDL_SetEventFilter(eventFilter, &e);

switch (e.type)
{

case SDL_QUIT:

quit = true;

break;

case SDL_KEYDOWN:

switch (e.key.keysym.sym)
{

case SDLK_SPACE:

//Function that continuously spins the reels until they reach a random destination
spinReelsRandom();

SDL_Delay(25);

break;

case SDLK_0:

cout << "This works";

break;

case SDLK_ESCAPE:

quit = true;

break;
}

}

//Final Spin Cleanup
spinCleanup();

}
}

最佳答案

添加第二个条件:

while (SDL_PollEvent(&e) != 0 && quit == false)

关于c++ - 暂时禁用 SDL 事件队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49330005/

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