繁体   English   中英

pygame动画/事件循环和flask-socketio

[英]Pygame animation/event loop and flask-socketio

我一直在研究Raspberry Pi驱动的照相亭,这是我的第一个RPi项目,通过用户智能手机上的Web界面进行控制。

展位本身有一个内置的显示屏,该显示屏具有pygame视图,可以在拍照时提供动画指导和倒计时。 它使用flask-socketio( http://flask-socketio.readthedocs.org/en/latest/ )处理客户端连接,并通过智能手机从用户输入事件。

Pygame需要位于应用程序的主线程上,socketio也是如此,所以我的问题是,如果显示pygame视图,我将无法使socketio工作。

我的原始逻辑是让socketio事件创建如下事件:

@socketio.on('connect', namespace'/photo')
def client_connect():
    evnt = pygame.event.Event(gui.INFOEVENT, msg="client_connect")
    pygame.event.post(evnt)

然后在pygame线程中捕获此事件:

running = True
while running:
    for event in pygame.event.get():
        if (event.type is gui.INFOEVENT and event.msg == "client_connect"):
           # welcome client on photobooth screen and start guide

注意:我还没有检查语法,这可能是错误的。

有谁知道我将如何实现这一目标? 如果是这样,我的逻辑是否就此存在?

我努力使自己陷入困境,虽然我学到了很多东西,但是这个“有趣”的项目正在慢慢让我失望! 非常感谢您的帮助。

-安德鲁

三个问题:

  1. pygame.event.Event实例没有tpe属性。 我想你的意思是:

     if (event.type is gui.INFOEVENT and event.type == client_connect): 
  2. pygame事件(或任何其他python对象)的type属性不能同时指向gui.INFOEVENTclient_connect ,除非两个值相同(这使第二个检查变得多余)。
  3. client_connect作为变量永远不会在任何地方声明。 我认为您的意思是"client_connect"

但是,pygame事件可以具有与之相关的任意属性,因此您可以通过将event.type (存储client_connect的第二种用法)更改为任何其他值来解决问题二。

注意:我不熟悉socketio

最后,我找不到答案,但这就是我决定要做的。

我决定不使用单独的库(例如pygame)在photobooth本身上创建GUI,而要使用所有复杂的线程和诸如此类的东西,而是决定在我的socketio应用程序中创建一个单独的路由,该路由将在Raspberry Pi本身的信息亭模式浏览器中加载在运行时。

从那里开始,我的意图是当用户使用智能手机(通过索引路径)与展位进行交互并将事件发送回服务器(RPi)时,服务器将处理这些交互并将事件另外发送到本地GUI通过不同的名称空间。

这些事件可以在“本地GUI”上触发动画,过渡或倒计时等。

唯一的问题可能是性能和流畅的动画,因为该界面需要运行浏览器,而当有多个用户连接到展位时,这个问题就可以解决(尽管如果两个用户本身在展位中可能会出现硬件问题)客户尝试同时访问摄像机,但这是另一个故事!)

最好

安德鲁

暂无
暂无

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

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