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

Mor*_*789 2 python pygame network-programming pyro

我正在使用pygame和pyro在python中开发一个项目.我可以轻松地发送数据,函数,类等.但是,我不能在电线上发送表面而不会在运输途中死亡.

服务器在def __init__通过网络访问的类中创建一个表面:

self.screen = pygame.display.set_mode(SCREENRECT.size, NOFRAME)
Run Code Online (Sandbox Code Playgroud)

在服务器上,屏幕打印为Surface(800x800x32 SW),但当客户端检索时,它是Surface(Dead Display).

值得注意的是.当我使用访问器功能来获取我的屏幕时,我得到一个死显示.如果我print Player.screen用来获取变量,我会得到一个似乎是指向屏幕的pyro指针:<Pyro.core._RemoteMethod instance at 0x02B7B7B0>.也许我可以解除这个?

我很可能很厚,有没有人有一些见解?谢谢.:)

Rod*_*yde 6

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

  1. 在服务器上使用Surface.get_buffer()来访问底层像素.
  2. 记下Surface的尺寸,颜色深度等.
  3. 将通过线路从步骤1和2获得的数据发送到客户端.
  4. 在客户端上使用第2步中的尺寸,颜色深度等创建新曲面.
  5. 使用Surface.get_buffer()设置新Surface的像素,并复制步骤1中的像素.

编辑: 我刚想到我太复杂了.要序列化Surface,请使用pygame.image.tostring(),并重新加载它,使用pygame.image.fromstring().