문제

Pygame과 Pyro를 사용하여 Python 프로젝트를 진행하고 있습니다. 데이터, 기능, 클래스 등을 쉽게 보낼 수 있습니다. 그러나 나는 통과 할 때 나에게 죽지 않고 전선을 가로 질러 표면을 보낼 수 없습니다.

서버는 표면을 만듭니다 def __init__ 와이어를 가로 질러 액세스하는 클래스의 :

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

서버에서 화면은 다음과 같이 인쇄합니다 Surface(800x800x32 SW) 그러나 클라이언트가 검색하면 Surface(Dead Display).

그래도 주목할만한 것. 액세서 기능을 사용하여 화면을 얻을 때 데드 디스플레이가 나타납니다. 내가 사용하는 경우 print Player.screen 변수를 얻으려면 대신 화면에 대한 파이로 포인터 인 것 같습니다. <Pyro.core._RemoteMethod instance at 0x02B7B7B0>. 어쩌면 내가 이것을 피할 수 있을까요?

내가 두껍고있을 가능성이 높습니다. 누구든지 통찰력이 있습니까? 감사. :)

도움이 되었습니까?

해결책

피그 게임 표면은 기본 SDL 표면 주위의 래퍼이며, 파이로에 의해 직렬화 될 수 없다고 생각합니다. 내용물을 와이어를 가로 질러 복사하려면 다음과 같은 작업을 수행하는 것이 좋습니다.

  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