【发布时间】:2020-05-20 03:18:14
【问题描述】:
基本上,我正在尝试腌制一个名为 State 的类,它包含我想要发送的游戏状态,它不包含任何 pygame.surfaces。但是酸洗是说我试图用这个错误来酸洗一个:TypeError: cannot pickle 'pygame.Surface' object。这是我的状态类:
class State():
def __init__(self):
self.choosen = [None,None,None,None,None,None,
None,None,None,None,None,None];
self.Won = None;
self.tile = [0,0,0,0,0,0,
0,0,0,0,0,0]
self.level = 1;
self.pnum = [0,0];
self.pCards = [[],[]];
self.ready = False;
self.turn = False;
这不包含 pygame.surface。 此处列出了其他相关代码段。
这是服务器发送信息的方式。我在上面声明了套接字。
def threaded_client(conn,player):
global pnum
conn.send(pickle.dumps(player));
reply = None;
while True:
try:
data = conn.recv(4096)
state = pickle.loads(data);
if not data:
print("Disconnected");
break;
else:
reply = state;
print(pnum);
state.ready = pnum == 2;
conn.sendall(pickle.dumps(reply));
except:
break;
这就是我的网络类发送信息的方式。
def send(self,data):
try:
self.client.send(pickle.dumps(data))
p = pickle.loads(self.client.recv(4096));
return p
except socket.error as e:
print(e);
谢谢!
编辑:我发现了问题,选择的数组是图像。其中之一是,一旦你提出问题,你就会更加努力地检查你的代码以找到相当明显的东西。
【问题讨论】:
-
看起来你用
conn.send(pickle.dumps(player))发送你的玩家对象,我猜你的玩家对象包含一个pygame.surface。 minimal reproducible example 将帮助我们帮助您解决问题。