簡體   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