2

私は pygame と pyro を使用して python でプロジェクトに取り組んでいます。データ、関数、クラスなどを簡単に送信できます。ただし、転送中に死ぬことなく、ワイヤを介してサーフェスを送信することはできません。

サーバーは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>. 多分私はこれを逆参照できますか?

おそらく私は太っていますが、誰か洞察を持っていますか? ありがとう。:)

4

3 に答える 3

6

pygame Surface は、基礎となる SDL サーフェスのラッパーであり、Pyro ではシリアル化できないと思われます。その内容をネットワーク経由でコピーしたい場合は、次のようにしたほうがよいでしょう:

  1. サーバー上で Surface.get_buffer() を使用して、基になるピクセルにアクセスします。
  2. 表面の寸法、色深度などを書き留めます。
  3. 手順 1 と 2 で取得したデータを回線経由でクライアントに送信します。
  4. クライアントで、ステップ 2 の寸法、色深度などを使用して新しいサーフェスを作成します。
  5. Surface.get_buffer() を使用して新しい Surface のピクセルを設定し、ステップ 1 のピクセルをコピーします。

編集: 私はそれを複雑にしすぎていることに気づきました。Surface をシリアル化するにはpygame.image.tostring()を使用し、リロードするにはpygame.image.fromstring()を使用します。

于 2009-11-03T06:44:58.637 に答える
1

一般的に言えば、ネットワーク経由で Surface を送信したくはありません (Surface はデバイス依存のディスプレイであると想定しています)。ほとんどの場合、クライアントはローカル サーフェス上の描画を管理し、サーバーはクライアントに何を描画する必要があるかを伝えます。サーバーには、グラフィックスを表示できるディスプレイさえない場合があります。

于 2009-11-03T05:25:33.787 に答える
0

オブジェクトをピクルスにしてファイルを送信してみてください...

于 2009-11-03T08:21:18.970 に答える