簡體   English   中英

pygame 中的窗口在等待時凍結

[英]window in pygame freeze while waiting

我正在將 pygame 用於我的游戲及其在線游戲,但問題是,每當游戲的主循環等待來自服務器的套接字時,它就會凍結。 因此,除非輪到您,否則客戶端會等待來自服務器的套接字並且在等待和凍結期間什么也不做,直到它獲得套接字並輪到它為止。

因此,我在本網站和其他網站上閱讀了很少的答案和解決方案,並從我在 5 秒后什么都不做的情況下了解到操作系統認為窗口(已鎖定)? 所以我創建了線程 keep_run 但它沒有做任何更改並且窗口在輪到他時仍然凍結。

還要提到服務器與 select 庫一起工作,如果它有幫助的話,因為 keep_run() 是我使用的唯一線程。

我沒有在我的代碼中包含很多行,因為太多了,但它是可能導致它的重要內容的基本結論?

import sockets
import pygame
from threading import Thread
def keep_run():
    clock = pygame.time.Clock()
    fps = 60
    while True:
        pygame.event.pump()
        clock.tick(fps)

pygame.init()
keep_running = Thread(target=keep_run)
keep_running.setDaemon(True)
keep_running.start()


while Game_run:

   #the main loop
   server_command = client_socket.recv(1024)
   if server_command == "move":
       # make your turn
       do_turn()
   elif server_command == "over":
       # finish the game
       finish_game()

示例圖片: https : //i.stack.imgur.com/b4Qx8.png

您必須調用pygame.event.pump() (由pygame.event.get()pygame.event.clear()pygame.event.poll()pygame.event.wait()pygame.event.peek() ) 定期在初始化視頻子系統的線程中(Pygame 構建在 SDL 上,因此鏈接到 SDL 文檔)。

我還建議您不要使用pygame.event.pump() ,而是使用pygame.event.get()pygame.event.poll()正確處理所有事件。 更多關於這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM