基本上,我正在尝试pickle一个名为State的类,它保存了我想要发送的游戏状态,它不包含任何pygame.surfaces。但是pickle表示我正在尝试pickle一个错误: 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);
谢谢!
编辑:我找到问题了,选择的数组是图像。其中一件事是,一旦你问了问题,你就很难仔细检查你的代码,发现一些相当明显的东西。
发布于 2020-05-20 11:24:39
你有这行代码:
conn.send(pickle.dumps(player));
尽管您没有显示player
的定义,但由于这是一个骗局的东西,所以我将假设它是雪碧图。如果是,那么它将具有一个self.image
属性,即一个曲面。这很可能是抱怨的来源。
https://stackoverflow.com/questions/61904477
复制相似问题