繁体   English   中英

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

[英]Python, Pygame, Pyro: How to send a surface over a network?

我正在使用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. 记下Surface的尺寸,颜色深度等。
  3. 通过有线将从步骤1和步骤2获得的数据发送给客户端。
  4. 在客户端上,使用步骤2中的尺寸,颜色深度等来创建新的表面。
  5. 使用Surface.get_buffer()设置新的Surface像素,并复制第1步中的像素。

编辑:我只是觉得我太复杂了。 要序列化Surface,请使用pygame.image.tostring() ,并重新加载它,请使用pygame.image.fromstring()

一般来说,您不想在网络上发送Surface(我假设Surface是与设备相关的显示器)。 在大多数情况下,您的客户将负责管理其本地Surface上的图形,而您的服务器则负责告诉客户它需要绘制什么。 服务器甚至可能没有显示这是能够显示图形!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM