1

私はXNAで遊んでいて、LAN経由でゲームを動作させたいと思っていますが、これを行うには、リモート処理と呼ばれるものを使用する必要があることがわかりました。とにかく私はこれをうまく動かすことができました

    public class TestObject : MarshalByRefObject
{
    int testInt;

    public Level()
    {
        this.testInt = 5.Zero;
    }


    public int GetNumber()
    {
        return testInt;
    }
}

そして私のサーバーチャネル=newTcpChannel(4444); ChannelServices.RegisterChannel(channel、false);

        Type type = Type.GetType("Domain.Level,Domain");

        RemotingConfiguration.RegisterWellKnownServiceType(type,
            "FirstRemote",
            WellKnownObjectMode.Singleton);

とクライアント

      this.chanel = new TcpChannel();
      ChannelServices.RegisterChannel(chanel, false);
      this.testObject = (TestObject)Activator.GetObject(typeof(TestObject),
         "tcp://localhost:4444/FirstRemote");

これは機能しますが、問題はサーバーがオブジェクトにアクセスする方法がなく、引数を取るコンストラクターを作成できないため、テストオブジェクトのデータを初期化する方法がないことです。オブジェクトを作成し、新しいオブジェクトを作成する代わりにそれを使用するにはどうすればよいですか?

4

1 に答える 1

0

残念ながら、ゲーム内のリアルタイム ネットワーク通信は、現在の方向性よりも複雑であることがわかるでしょう。ほとんどのゲームは永続的なソケット接続を使用してクライアント間で情報をやり取りしますが、他の方法では一般にリアルタイムネットワーキングには遅すぎます。

Lidgren ネットワーク ライブラリを調べることをお勧めします。Lidgren はネットワーク通信を抽象化し、UDP と TCP で複数の信頼性モードを介して転送できる非常に小さくて高速なパケットにデータをシリアル化することをはるかに容易にします。ここで Lidgren プロジェクトを見つけることができます: http://code.google.com/p/lidgren-network-gen3/

余談ですが、Unreal Engine がどのようにネットワーキングを行っているかについては、http: //udn.epicgames.com/Three/NetworkingOverview.htmlで読むことができて非常に有益でした。

また、クライアント/サーバー パターンの実装に関する特定の詳細を示すブログを書きました: http://syndicatex.com/flatredball/flatredball-and-lidgren-multiplayer-networking/

于 2013-01-03T18:20:04.610 に答える