我正在使用 pygame 和 pyro 在 python 中开发一个项目。我可以轻松发送数据、函数、类等。但是,我不能在传输过程中不在我身上死掉的情况下通过电线发送一个表面。
服务器在 def __init__
中创建一个表面通过线路访问的类:
self.screen = pygame.display.set_mode(SCREENRECT.size, NOFRAME)
在服务器上,屏幕打印为 Surface(800x800x32 SW)
但是当客户端检索时它是 Surface(Dead Display)
.
不过有一点要注意。当我使用访问器函数获取我的屏幕时,我得到一个死显示。如果我使用 print Player.screen
为了获取变量,我改为获取似乎是指向屏幕的 pyro 指针:<Pyro.core._RemoteMethod instance at 0x02B7B7B0>
.也许我可以取消引用它?
很可能我很厚,有没有人有一些见解?谢谢。 :)
最佳答案
pygame Surface 是底层 SDL 表面的包装器,我怀疑 Pyro 无法对其进行序列化。如果你想通过网络复制它的内容,你最好做这样的事情:
- 在服务器上使用 Surface.get_buffer() 获取 访问底层像素。
- 记下 Surface 的尺寸、颜色深度等。
- 通过网络将第 1 步和第 2 步中获得的数据发送给客户端。
- 在客户端使用第 2 步中的尺寸、颜色深度等创建一个新表面。
- 使用 Surface.get_buffer() 设置新 Surface 的像素并复制第 1 步中的像素。
编辑: 我只是想到我把它复杂化了。要序列化您的 Surface,请使用 pygame.image.tostring() , 并重新加载它,使用 pygame.image.fromstring() .
关于Python、Pygame、Pyro : How to send a surface over a network?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665376/