4

オンライン マルチプレイヤー ソーシャル ゲームの開発を考えています。世界の共有状態には、バックエンドで何か高速なものが必要になるため、考えられる解決策は次のようになります。

  1. サーバー上の高速ゲームエンジン (例: c++ ) といくつかのフロントエンド言語 (php/python/ruby) + フラッシュ

  2. Python のスタック全体 (ツイストまたはスタックレス Python を使用) + フラッシュ

  3. .NET (asp.net または asp.net mvc) + フラッシュ

  4. .NET + シルバーライト

最初の 1 つは、生産性の観点からやり過ぎかもしれません (3 つの異種層)

番号 4 はプログラマにとって天国かもしれません (すべてのレイヤーで共通の環境)。

  • そのようなものは Silverlight で構築されたことはありません。
  • Silverlight の設計者を見つけるのは難しいかもしれません
  • SL フル OO アーキテクチャと比較すると、Flash ムービー/クリップ モデルが批判されていますが、仮想世界の余分な部分を外部のデザイナーが設計する場合、Flash ムービー/クリップ モデルは有利ではありませんか? 彼らは、例えば.swfを準備するだけです。4 つのフレームで 1 つのアイテムの 4 つのパースペクティブ - SL では難しくないですか?
  • Silvelight にはいくつかのゲーム機能 (衝突検出など) が欠けているようです

どう思いますか?

[編集] ゲーム自体はより大きなポータルの一部になるため、エンジンを何らかの Web フレームワークと統合するとよいでしょう。

4

3 に答える 3

6

フロントエンドにSilverlightを使用し、バックエンドにPythonを使用して大規模なマルチプレイヤーオンラインゲームに1年を費やしました(開発を簡素化するために、実際にはSilverlightでIronPythonを使用しました)

Silverlightはこれに非常に適しています。他の方法では、本格的なオンラインゲームは行いません。それはすでに市場の35%を占めており、開発が完了するまでには、もうそれほど重要ではないほど十分に高いはずです。シリアスゲームの場合、ほとんどの人は4MBのブラウザプラグインをインストールしてもかまいません。小惑星のクローンを少しだけ作成したい場合は、フラッシュを使用してください。

やり直す必要がある場合は、サーバーにPythonを使用することにします。これは、私が最も熟練しているサーバーテクノロジーであるためですが、フロントエンドでC#を使用し、データの受け渡しにJSONを使用すると思います。

私があなたに与えることができる最高のアドバイスは:

  1. 既存のライブラリとコードを可能な限り活用する
  2. パフォーマンスについて時期尚早に考えないでください

最も難しいのは、ゲームを終了し、よく知っているテクノロジーを使用し、コードではなく時間に合わせて最適化することです。うまくいけば、あなたは私ができなかったことをすることができます-いまいましいゲームを終えてください:)

編集

やり直す必要がある場合にC#を使用する理由について:

IronPythonには長所と短所がありました。サーバーとクライアント間でコードファイル(定数、モデルなど)を共有できたのは素晴らしいことでした。変更を加えてブラウザを更新し、それを確認するのは素晴らしかったです。デバッグはC#ほど友好的ではありませんでした。

しかし、いくつかの点で、C#の二級市民であり、データバインディングが機能せず、xamlでIronPythonクラスを使用できません。読み込み時間が問題だったので、実際には、バックグラウンドスレッドで並行してインポートを設定して高速化するために多大な労力を費やしました。xamlが関係する2番目の市民ステータスのため、テンプレート言語を使用してxamlをhtmlであるかのように生成しました。これは、実際にはデータバインディングよりもうまく機能しましたが、IronPythonではPythonテンプレート言語が機能しなかったため、独自の(別のタイムシンク。)

モデルの共有を有効にするには、独自のORMを作成する必要がありました。それは簡単でした。しかし、それらを転送するために、JSONを渡して、代わりにIronPythonとPythonの間で機能する最適化されたバイナリ形式を作成しました。それはまた別の時間のシンクでした。

後から考えると、私はそれらすべてのウサギの小道に気を取られるべきではありませんでした。

于 2009-08-10T14:28:37.703 に答える
5

Twisted はこの目的に使用され、成功しています。非同期呼び出しに基づいているため、永続的な接続を必要とするアプリケーションにとって非常に効率的です。また、フラッシュで使用するための優れた RTMP 実装もあります。chesspark をチェックしてください。Twisted で構築されています。

http://www.chesspark.com/

さらに、ゲーム エンジンは実際には c/c++ である必要はありません。ゲームの複雑さと種類によって異なります。しかし、かなり優れた pygame ライブラリもあります。

個人的には、Silverlight を使用しないことをお勧めします。フラッシュ プラグインははるかによく採用されており、特に ms 以外のオペレーティング システムでは、近い将来も引き続き採用されるでしょう。これを心に留めてはいけませんが、あなたのゲームを見るためだけに Silverlight をインストールするつもりはありません。

于 2009-03-12T15:34:38.913 に答える
3

オプション2-スタックレスPythonを使用する-はEveOnlineが使用するものです。

http://support.eve-online.com/Pages/KB/Article.aspx?id=128


編集

もちろん、実際のソフトウェアを入手するまでは、適度に優れたパフォーマンスを発揮するアーキテクチャを作成することは不可能です。したがって、ここでの判断は単なる憶測です。

ただし、次の点を考慮してください。

  1. 静的コンテンツ(.jsファイル、.css、.pngなど)がネットワーク帯域幅を支配する傾向があります。これを処理するには、リバースプロキシサーバー(イカなど)を使用する必要があります。

  2. Squidはどこかからコンテンツを取得する必要があります。静的コンテンツをsquidに提供する軽量のファイルサーバーが必要です。Nginxまたはlighttpdか何か。Apacheはこれで機能しますが、ある程度はやり過ぎかもしれません。

  3. 動的コンテンツ(表示されます)は2つの形式になります。

    • ゲームをサポートするJSON。

    • ポータルをサポートするHTML。

    このためには、mod_wsgiエンジンを使用するのが最も幸せです。Apacheは確かにこれを行います。ngingnxとlighttpdも機能する可能性があります。

    • JSONのものはURIの1つのセットである必要があります。RESTは優れたデザインパターンです。これらはmod_wsgiを介して、必要に応じてスタックレスPythonを使用してゲーム指向のサーバーに接続します。フロントエンド(たとえば、Apache)には、これらのURIをフィルタリングし、ゲームを提供するmod_wsgiデーモンにルーティングするための場所、ディレクトリ、または仮想ホストがあります。これを構築するためにWekzeugを見てください。

    • HTMLのものはURIの別のセットです。mod_wsgiを介して、これらは従来のPythonを実行しているDjangoサーバーに接続します。フロントエンド(たとえば、Apache)には、これらのURIをフィルタリングし、mod_wsgiデーモンにルーティングするための場所、ディレクトリ、または仮想ホストがあります。

于 2009-03-12T15:22:28.990 に答える