【问题标题】:Trying to disconnect players试图断开玩家的连接
【发布时间】:2020-09-13 17:27:00
【问题描述】:

我一直在尝试用 pygame 制作多人游戏。实际上,我在正确断开播放器时遇到了很多麻烦。

每当我关闭一个客户端时,之前打开的客户端就不再工作了。我认为问题出在服务器文件中,但我不太确定如何解决它。这是服务器错误:

line 50, in threaded_client
    del players[player]
IndexError: list assignment index out of range

这是我的代码my code

提前致谢!

【问题讨论】:

  • 问题是你在players列表中通过他们的位置(索引)来称呼他们。这是一个问题,因为当您从列表中删除玩家时,列表的长度会改变。因此,下次访问该列表时,索引 player 具有不同的含义,并且会像本例一样导致超出范围的错误。
  • 谢谢!现在我只是在玩家断开连接时将他们的价值设置为 None 。我确信可能有更好的方法来做到这一点......但它有效

标签: python multithreading sockets networking pygame


【解决方案1】:

根据@Seb 的评论,del 语句通过键删除。如果键不在列表中(例如,列表的长度减少了),则会引发 IndexError。

在您的主循环和线程函数中,通过引用传递 Player 对象会更好。在你的播放器线程函数中,你会:

  1. 无需按索引从列表中读取播放器,您只需获得可用的实例
  2. 您可以使用 player.remove(player) 从列表中删除播放器

您还希望使用更新功能,而不是在每个循环中重新分配播放器对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 2012-05-18
    • 2019-02-03
    • 2019-04-07
    相关资源
    最近更新 更多