2009-11-03 2 views
2

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

Сервер делает поверхность в класса осуществляется доступ через провод:

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

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

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

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

ответ

6

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

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

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

+0

Возможно, это именно то, что я ищу. Я постараюсь реализовать его сегодня вечером. – Morrowind789

+0

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

1

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

0

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