Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 忽略OpenCV中waitKey()上的键盘事件_Python_Opencv - Fatal编程技术网

Python 忽略OpenCV中waitKey()上的键盘事件

Python 忽略OpenCV中waitKey()上的键盘事件,python,opencv,Python,Opencv,我正在学习OpenCV,我决定用它做一个蛇游戏。几乎完成了,但有一个看似简单的小问题,但我找不到解决方案 while True: move() cv2.imshow('Snake Game', frame) cv2.waitKey(250) 它应该在下一帧前等待250毫秒,但按键打破了等待,所以当我按下一个键时游戏会加速。我怎样才能让它忽略键盘事件而只使用时间呢?如果waitKey没有停止按键后的等待,我会非常惊讶。事实上,这个名字本身就表明了这一点。所以基本上就像调用

我正在学习OpenCV,我决定用它做一个蛇游戏。几乎完成了,但有一个看似简单的小问题,但我找不到解决方案

while True:
    move()
    cv2.imshow('Snake Game', frame)
    cv2.waitKey(250)

它应该在下一帧前等待250毫秒,但按键打破了等待,所以当我按下一个键时游戏会加速。我怎样才能让它忽略键盘事件而只使用时间呢?

如果
waitKey
没有停止按键后的等待,我会非常惊讶。事实上,这个名字本身就表明了这一点。所以基本上就像调用一个叫做max的函数,然后期望最小值

根据您的代码和您所描述的,您使用
waitKey
有两个原因:

  • 等待某个固定的时间。这意味着您正在使用它来同步您的游戏循环
  • 使用它(可能)来处理用户与游戏交互的按键

  • 在我看来,要做的第一件事就是停止等待,只要准备好就继续不断地显示帧。对于同步,您只需要为每帧打印节省时间。利用这段时间,在用户交互或决定如何处理帧或。。。有一个地方可以帮助您了解游戏循环是如何实现的。请看这里:

    等待键代码似乎位于无限循环中,请提供有关您的代码以及您希望它执行的内容的更多详细信息。这里有一个不同的线程,我可以从中获取关键输入。这个循环在主线程中。它移动蛇,显示帧,等待250毫秒并继续循环,直到我退出程序。我的问题是,当我按下一个键时,它会继续循环而不等待。我试过了时间。睡觉而不是等待,但是imshow不起作用。谢谢你抽出时间。最后,我在主循环中有一个waitKey(1),并将move()移动到一个新线程,并在移动之前使用time.sleep。它可以工作,但我只是想知道一种方法,在不被按键打断的情况下,用OpenCV显示一段时间的图像。但出于某种原因,这似乎是不可能的。