Pergunta

Estou trabalhando em um projeto em Python usando Pygame e Pyro. Posso enviar dados, funções, classes e similares com facilidade. No entanto, não posso enviar uma superfície através do fio sem que ele morra em trânsito.

O servidor faz uma superfície no def __init__ da classe que está sendo acessada através do fio:

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

No servidor, a tela impressa como Surface(800x800x32 SW) mas quando recuperado pelo cliente, é Surface(Dead Display).

Algo a ser observado. Recebo uma exibição morta quando uso uma função de acessador para obter minha tela. Se eu usar print Player.screen Para obter a variável, obtenho o que parece ser um ponteiro de pirro para a tela: <Pyro.core._RemoteMethod instance at 0x02B7B7B0>. Talvez eu possa desreferenciar isso?

Mais do que provável que estou sendo espesso, alguém tem alguma visão? Obrigado. :)

Foi útil?

Solução

Uma superfície de pygame é um invólucro em torno de uma superfície SDL subjacente, que eu suspeito que não possa ser serializada pelo piro. Se você quiser copiar seu conteúdo do outro lado do fio, seria melhor fazer algo assim:

  1. No servidor, use Surface.get_buffer () para obter acesso aos pixels subjacentes.
  2. anote as dimensões da superfície, profundidade de cor etc.
  3. Envie os dados obtidos das etapas 1 e 2 sobre o fio para o cliente.
  4. No cliente, crie uma nova superfície usando as dimensões, profundidade de cor, etc., a partir da etapa 2.
  5. Defina os novos pixels da superfície usando superfície.get_buffer () e copiando nos pixels da etapa 1.

Editar:Apenas me ocorreu que estou complicando demais. Para serializar sua superfície, use pygame.image.toString (), e para recarregá -lo, use pygame.image.FromString ().

Outras dicas

De um modo geral, você não deseja enviar uma superfície (estou assumindo que uma superfície é uma tela dependente do dispositivo) em toda a rede. Na maioria das vezes, seu cliente será responsável por gerenciar o desenho em sua superfície local e seu servidor é responsável por dizer ao cliente o que ele precisa desenhar. Um servidor pode nem mesmo tenho Uma tela capaz de mostrar gráficos!

Tente consertar o objeto e envie o arquivo ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top