首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pickle说它不能pickle pygame.surface,但我的对象不是pygame.surface

Pickle说它不能pickle pygame.surface,但我的对象不是pygame.surface
EN

Stack Overflow用户
提问于 2020-05-20 11:18:14
回答 1查看 272关注 0票数 0

基本上,我正在尝试pickle一个名为State的类,它保存了我想要发送的游戏状态,它不包含任何pygame.surfaces。但是pickle表示我正在尝试pickle一个错误: TypeError: cannot pickle 'pygame.Surface‘object。这是我的状态类:

代码语言:javascript
运行
复制
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。此处列出了其他相关代码段。

这就是服务器发送信息的方式。我在上面声明了套接字。

代码语言:javascript
运行
复制
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;

这就是我的网络类发送信息的方式。

代码语言:javascript
运行
复制
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);

谢谢!

编辑:我找到问题了,选择的数组是图像。其中一件事是,一旦你问了问题,你就很难仔细检查你的代码,发现一些相当明显的东西。

EN

回答 1

Stack Overflow用户

发布于 2020-05-20 11:24:39

你有这行代码:

代码语言:javascript
运行
复制
conn.send(pickle.dumps(player));

尽管您没有显示player的定义,但由于这是一个骗局的东西,所以我将假设它是雪碧图。如果是,那么它将具有一个self.image属性,即一个曲面。这很可能是抱怨的来源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61904477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档