我正在使用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表面是围绕基础SDL表面的包装器,我怀疑不能被Pyro序列化。如果您想在电线中复制其内容,最好做这样的事情:

  1. 在服务器上,使用Surface.get_buffer()获取对基础像素的访问。
  2. 记下表面的尺寸,颜色深度等。
  3. 将从电线1和2通过导线获得的数据发送到客户端。
  4. 在客户端上,从步骤2开始使用尺寸,颜色深度等创建一个新的表面。
  5. 使用Surface.get_buffer()设置新的Surface的像素,并从步骤1开始在像素中复制。

编辑:我只是想到我过度复杂化了。要序列您的表面,请使用 pygame.image.tostring(), ,为了重新加载,请使用 pygame.image.fromstring().

其他提示

一般而言,您不想在整个网络上发送表面(我假设表面是一个与设备有关的显示)。在大多数情况下,您的客户将负责在其本地表面上管理图纸,并且您的服务器负责告诉客户端需要绘制的内容。服务器甚至可能不会 能够显示图形的显示!

Try pickling the object and send the file...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top