【问题标题】:pygame window Not responding error (using sockets)pygame 窗口无响应错误(使用套接字)
【发布时间】:2021-10-15 08:53:10
【问题描述】:

我制作了一个使用以下逻辑的在线连接 4 游戏:

  • Player1 将他们的移动发送到服务器

  • 服务器将移动发送到 Player2

  • Player2 接收到移动,做出自己的移动并将其发送到服务器

  • 服务器将移动发送到 Player1

  • Player1 接收到移动,做出自己的移动并将其发送到服务器

  • (直到有人获胜或平局)

它可以工作,但有一个问题:当玩家 1 需要一段时间来选择他们的移动并且玩家 2 正在等待接收时,玩家 2 的 pygame 窗口变得无响应,因为它卡在 .recv() 调用中。我该如何解决这个问题?

【问题讨论】:

  • 您总是需要处理事件以使您的操作系统满意。您可以在单独的线程here's an example 中处理网络通信,该线程使用线程连接到数据库,并通过队列与主 pygame 线程进行通信。

标签: python sockets pygame


【解决方案1】:

您需要使用线程和事件。这样,pygame 窗口可以在另一个线程等待来自服务器的任何更新时刷新。

一旦线程接收到更新,一个事件应该将它处理给主线程。

我不太记得实现细节(我是 C# 开发人员),但我在等待 AI 在 Python 中完成时使用了它。

【讨论】:

  • 我应该将套接字更改为非阻塞吗?
  • @pythonlover753 不,您需要创建一个新线程来执行处理套接字的代码,同时主线程刷新 pygame 窗口。这就像有 2 个人做一个任务!此页面:tutorialspoint.com/python/python_multithreading.htm 它包含一个很好的示例,其中它创建了一个包含“运行”函数的线程(据我所知),套接字应该在不影响主窗口的情况下等待 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多