Domanda

Sto lavorando su un progetto in Python usando pygame e pyro. Posso inviare i dati, funzioni, classi, e simili facilmente. Tuttavia, non posso inviare una superficie attraverso il filo senza morire su di me in transito.

Il server fa una superficie nella def __init__ della classe a cui si accede attraverso il filo:

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

Sul server, le serigrafie come Surface(800x800x32 SW) ma quando viene recuperato dal cliente è Surface(Dead Display).

Qualcosa da notare però. Ottengo un display morto quando uso una funzione di accesso per ottenere il mio schermo. Se uso print Player.screen per ottenere la variabile che invece ottengo quello che sembra essere un puntatore pyro allo schermo: <Pyro.core._RemoteMethod instance at 0x02B7B7B0>. Forse posso dereference questo?

Molto probabilmente sto essendo di spessore, qualcuno ha qualche informazione? Grazie. :)

È stato utile?

Soluzione

Una Superficie Pygame è un involucro intorno ad una superficie sottostante SDL, che sospetto non può essere serializzato da Pyro. Se si desidera copiare il suo contenuto attraverso il filo, si sarebbe meglio fare qualcosa di simile:

  1. sull'uso del server Surface.get_buffer () per ottenere accesso ai pixel sottostanti.
  2. annotare le dimensioni della superficie, profondità di colore, ecc.
  3. inviare i dati ottenuti da passaggi 1 e 2 sopra il filo al cliente.
  4. sul client creare una nuova superficie usando le dimensioni, profondità di colore, ecc, dal punto 2.
  5. impostare pixel della nuova superficie con Surface.get_buffer () e la copia in pixel dal punto 1.

Modifica E 'appena venuto in mente che sto overcomplicating esso. Per puntate la vostra superficie, utilizzare pygame.image.tostring () , e per ricaricare, utilizzare pygame.image.fromstring ( ) .

Altri suggerimenti

In generale, non si desidera inviare una superficie (sto supponendo che una superficie è un display dipendente dal dispositivo) attraverso la rete. La maggior parte del tempo, il vostro cliente sarà responsabile della gestione del disegno sulla sua superficie locali, e il server è responsabile per dire al cliente che cosa ha bisogno di disegnare. Un server può anche non sono di un display che è in grado di mostrare la grafica!

Prova decapaggio l'oggetto e inviare il file ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top