2009-11-03 22 views
2

Je travaille sur un projet en python en utilisant pygame et pyro. Je peux facilement envoyer des données, des fonctions, des classes, etc. Cependant, je ne peux pas envoyer une surface à travers le fil sans qu'elle ne meure sur moi en transit.Python, Pygame, Pyro: Comment envoyer une surface sur un réseau?

Le serveur fait une surface dans la de la classe étant accessible à travers le fil:

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

Sur le serveur, les sérigraphies que Surface(800x800x32 SW) mais quand récupéré par le client, il est Surface(Dead Display).

Quelque chose à noter cependant. Je reçois un affichage mort lorsque j'utilise une fonction d'accesseur pour obtenir mon écran. Si j'utilise print Player.screen pour obtenir la variable je reçois à la place ce qui semble être un pointeur pyro à l'écran: <Pyro.core._RemoteMethod instance at 0x02B7B7B0>. Peut-être que je peux déréférencer cela?

Plus que probablement je suis épais, est-ce que quelqu'un a un aperçu? Merci. :)

Répondre

6

Une surface pygame est une enveloppe autour d'une surface SDL sous-jacente, que je suspecte ne peut pas être sérialisée par Pyro. Si vous souhaitez copier son contenu à travers le fil, vous seriez mieux faire quelque chose comme ceci:

  1. sur l'utilisation du serveur Surface.get_buffer() pour obtenir accès aux pixels sous-jacents.
  2. notez les dimensions de la surface, la profondeur de couleur, etc.
  3. envoyez les données obtenues à partir des étapes 1 et 2 sur le câble au client.
  4. sur le client de créer une nouvelle surface en utilisant les dimensions, la profondeur des couleurs, etc, à partir de l'étape 2.
  5. définir les pixels de la nouvelle surface à l'aide de Surface.get_buffer() et la copie dans les pixels provenant de l'étape 1.

Editer: Il me vient à l'esprit que je suis trop compliqué. Pour sérialiser votre surface, utilisez pygame.image.tostring() et pour le recharger, utilisez pygame.image.fromstring().

+0

Cela pourrait être exactement ce que je cherche. Je vais essayer de l'implanter ce soir. – Morrowind789

+0

Votre modification à votre message a été ce qui m'a vraiment aidé à aller au fond de mon problème. La lecture de docs de pygame était également cruciale! Merci de les lier à votre message. – Morrowind789

1

En règle générale, vous ne voulez pas envoyer de Surface (je suppose qu'une Surface est un affichage dépendant du périphérique) sur le réseau. La plupart du temps, votre client sera responsable de la gestion du dessin sur sa surface locale, et votre serveur est responsable de dire au client ce qu'il doit dessiner. Un serveur ne peut même pas avoir un affichage qui est capable d'afficher des graphiques!

0

Essayez de décaper l'objet et envoyez le fichier ...