Вопрос

Я работаю над проектом в Python, используя Pygame и Pyro. Я могу легко отправлять данные, функции, классы и тому подобное. Тем не менее, я не могу отправить поверхность через проволоку, не умирая на меня в пути.

Сервер делает поверхность в def __init__ о классе, доступном через проволоку:

self.screen = pygame.display.set_mode(SCREENRECT.size, NOFRAME)

На сервере экрана печатает как Surface(800x800x32 SW) но при извлечении клиентом это Surface(Dead Display).

Что -то, чтобы отметить, хотя. Я получаю мертвый дисплей, когда использую функцию доступа для получения экрана. Если я использую print Player.screen Чтобы получить переменную, я вместо этого получаю то, что, кажется, является указателем пироса на экран: <Pyro.core._RemoteMethod instance at 0x02B7B7B0>. Анкет Может, я смогу сделать это?

Скорее всего, я густой, у кого -нибудь есть какое -то понимание? Спасибо. :)

Это было полезно?

Решение

Поверхность Pygame - это обертка вокруг нижней поверхности SDL, которую, как я подозреваю, не может быть сериализована Pyro. Если вы хотите скопировать его содержимое через проволоку, вам было бы лучше сделать что -то подобное:

  1. На сервере используйте Surface.get_buffer (), чтобы получить доступ к базовым пикселям.
  2. Запомните размеры поверхности, глубину цвета и т. Д.
  3. Отправьте данные, полученные из шагов 1 и 2, над проводом клиенту.
  4. На клиенте создайте новую поверхность, используя размеры, глубину цвета и т. Д., С шага 2.
  5. Установите пиксели новой поверхности, используя Surface.get_buffer () и копируйте в пикселях с шага 1.

Редактировать:Мне просто пришло в голову, что я переполняю это. Чтобы сериализировать вашу поверхность, используйте pygame.image.tostring (), и перезагрузить, использовать pygame.image.fromString ().

Другие советы

Вообще говоря, вы не хотите отправлять поверхность (я предполагаю, что поверхность является зависимым от устройства дисплеем) по всей сети. В большинстве случаев ваш клиент будет отвечать за управление чертежей на локальной поверхности, и ваш сервер отвечает за то, чтобы рассказать клиенту, что ему нужно нарисовать. Сервер может даже не имеют дисплей, способный показывать графику!

Попробуйте поднять объект и отправить файл ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top