سؤال

أنا أعمل في مشروع في بيثون باستخدام Pygame و Pyro. يمكنني إرسال البيانات والوظائف والفئات، وما أعجبك بسهولة. ومع ذلك، لا أستطيع إرسال سطح عبر السلك دون أن يموتني في العبور.

الخادم يجعل السطح في def __init__ من الفصل الذي يتم الوصول إليه عبر الأسلاك:

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

على الخادم، يطبع الشاشة كما Surface(800x800x32 SW) ولكن عند استرجاعها من قبل العميل Surface(Dead Display).

شيء لننظر إليه. أحصل على عرض ميت عندما استخدم وظيفة الملحق للحصول على شاشتي. إذا كنت تستخدم print Player.screen للحصول على المتغير، أحصل بدلا من ذلك على ما يبدو مؤشر Pyro على الشاشة: <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