Python、Pygame、Pyro : How to send a surface over a network?

标签 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> .也许我可以取消引用它?

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

最佳答案

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() .

关于Python、Pygame、Pyro : How to send a surface over a network?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665376/

相关文章:

python - "if"命令仅运行一次且不重复

python - 连续使用fixed_quad错误

python - pyQT声子播放器全屏显示?

iphone - 如何从 Objective C 中的域名中获取 IP 地址的域名和 IP 地址?

java - 用 Java 6 编写 FTP 客户端

python - 追逐游戏-错误信息: "' module' object has no attribute 'display' "

python - 使用 Selenium Python 保存大型 html 文件时出现 WebDriverException : Message: Exception. .. "Failure"nsresult: "0x80004005 (NS_ERROR_FAILURE)"

python - 邮件会发送 3 次,而不是每个地址一次?

multithreading - Haskell Windows hPutStrLn不会在网络句柄上阻止

python - 在 pygame 中通过 colliderect 检查非常相似的障碍物的碰撞时,如何提高性能?