Python,Pygame,Pyro:如何通过网络发送表面?

时间:2009-11-03 05:19:10

标签: python network-programming pygame pyro

我正在使用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>。也许我可以解除这个?

我很可能很厚,有没有人有洞察力?谢谢。 :)

3 个答案:

答案 0 :(得分:6)

pygame Surface是底层SDL表面的包装,我怀疑它不能被Pyro序列化。如果你想通过网络复制它的内容,你最好做这样的事情:

    服务器上的
  1. 使用Surface.get_buffer()来获取 访问基础像素。
  2. 记下Surface的尺寸,颜色深度等。
  3. 通过网络将从步骤1和2获得的数据发送给客户端。
  4. 客户端上的
  5. 使用第2步中的尺寸,颜色深度等创建新曲面。
  6. 使用Surface.get_buffer()设置新Surface的像素,并复制步骤1中的像素。
  7. 修改 我突然意识到我过度复杂了。要序列化Surface,请使用pygame.image.tostring(),然后重新加载,请使用pygame.image.fromstring()

答案 1 :(得分:1)

一般来说,您不希望通过网络发送Surface(我假设Surface是依赖于设备的显示)。大多数情况下,您的客户将负责管理其本地Surface上的绘图,您的服务器负责告诉客户端需要绘制什么。服务器甚至可能没有能够显示图形的显示器!

答案 2 :(得分:0)

尝试腌制对象并发送文件......