1

Python で 2D 横スクロール ゲームを作成しようとしていますが、使用するライブラリがわかりません。私は PyGame (3 年間更新されていません)、Pyglet、および PyOpenGL を知っています。私の問題は、これらのライブラリは言うまでもなく、Python で作成された実際に出荷されたゲームを見つけることができないことです。実際のゲームであり、競争ではありません。

誰でもこれらのライブラリに光を当てることができますか? PyGame はまだ効果的に使用されていますか? Pyglet は価値がありますか? それらのいずれかがゲームの作成に使用されたことがありますか? 私が忘れている他のライブラリはありますか?

正直なところ、Python を使いたいかどうかさえわかりません。遅すぎる、証明されていない (Python だけで書かれたゲームの場合) などです。主に Python で作成されたゲームを見つけたことがありません。販売されました。最終的に Python を使用しない場合、2 番目の、またはより良い選択は何でしょうか? ジャワ?ルア?

4

3 に答える 3

7

Pygame は SDL のラッパーにすぎないため、技術的には多くのゲームが SDL を使用して作成されていますが、ほとんどの作業はとにかく C サイドで行われています。少し遅いですが、2D ゲームをやるなら十分でしょう。Frets-on-Fireは PyGame を使用して純粋な Python で作成され、FoFiXは Python で C 拡張機能を使用して作成されました。これらのゲームはどちらも非常に優れていますが、低速のコンピューターでは FoFiX を 4 プレーヤーで実行する際に問題が発生する可能性があります。

Pyglet も非常に優れていますが、エミュレーターの開発、単一レイヤーの描画にしか使用していないため、ゲーム開発で実際にどの程度機能するかはわかりません。SDL/PyGame よりも Pyglet で直接 OpenGL を使用する方がはるかに簡単であることがわかりました。そのため、3D ゲームを行う場合は、おそらく SDL を使用するよりも優れています。また、Python で書かれているため、クラスを拡張して関数の処理方法を変更することは非常に簡単です。たとえば、pyglet Texture クラスを介してデータを openGL テクスチャにロードしようとしましたが、クラスは必要な形式でデータをロードできませんでした。そのため、そのクラスを拡張し、テクスチャ タイプを取得する関数を変更しました (文字列から)私が望んでいたテクスチャをすばやく簡単に含めることができます。

十分に言及されていないライブラリの 1 つにSFMLがあります。2.0 API (現在はベータ版) は非常に優れており、使いやすく、私の記憶が正しければ、SDL よりも少し高速に実行されます。また、SDL よりも「オブジェクト指向」であるため、Python などのオブジェクト指向言語で作業している場合は非常に便利です。Cython で Bastien Leonard によって書かれた、非常に使いやすい素晴らしい Python バインディングがいくつかあります (または、最新バージョンを使用したくない場合は、古い C バインディングを使用できます)。しばらく前にこれを使用しましたが、非常に楽しい経験でした。

Python を使用したゲームがあまり出荷されていない理由は非常に単純です。Python ソースを閉じることができないからです。Py2Exeなどを使用してpythonを実行可能ファイルに「コンパイル」しても、実際にはインタープリターとpythonソースをexeファイルにパックするだけで、16進エディターでexeを開くだけでソースを取得できます。

私は「Python で書き、時間の重要な部分は C で書く」の支持者ですが、Python が遅すぎると思われる場合は、おそらく C か、できれば C++ を方法としてお勧めします。なぜなら、Java で書くことによるユーザビリティの利点はあまり得られず、C 言語は Java よりも実行がかなり高速であり、Lua は Python のユーザビリティの一部を奪うだけで、目立ったパフォーマンスの向上は得られないからです。 . SFML と SDL はどちらも C(++) から直接使用できます。

Python を使用することに決めた場合のアドバイス: スクリプト言語として使用されることになっているとおりに使用してください。純粋な python で画像をいじったりロードしたりしないでください。選択したライブラリで利用可能なインターフェイスを使用するか (それらはすべて、これらの種類のものに対して非常に優れたインターフェイスを備えています)、拡張モジュールを作成してそれを行います。ロジックの制御とライブラリからのデータの取得には Python を使用します。この単純なルールに従えば、実際にパフォーマンスの問題が発生することはありません。

于 2012-08-18T07:16:33.590 に答える
4

私の経験では、実際にあなたを殺そうとしているものは、一般的にグラフィックスとはまったく関係がありません。確かに、ダーティ レクタングルの更新などの手法を使用せずに、すべてのフレーム レンダリングを 16 ミリ秒未満で完了するのは困難ですが、それは大きな問題にはなりません。あなたが眠れなくなること。パフォーマンスに関する最大の考慮事項は、はるかに初歩的なことから生じます。衝突検出、空間検索、パスファインディングの 3 つは大きなものです。これらは、たとえ数百のオブジェクトに対して非効率的に実行された場合でも、ロジック フレーム レートをフロアに簡単に送り込んでしまう可能性があります。このような問題の場合、純粋な Python は最良の選択ではないかもしれませんが、より高いレベルのロジックのために Python を保持しながら、これらを C/C++ にオフロードすることは難しくありません。これは基本的に、Civilization 4 や EVE Online (クライアントとサーバー!) のようなゲームで行われていることです。パフォーマンスが重要なコードを C++ にオフロードし、Python の柔軟性とシンプルさを「日常の」タスクに維持します。

pygame は活発に開発されており (安定したリリースはしばらくありませんでしたが、Mercurial リポジトリは非常に活発です)、かなり人気があります。また、評判の高い (C ベースの!) SDL ライブラリを内部で使用しています。pyglet も積極的に開発されており、すべてのレンダリングに OpenGL を使用しているため、3D 開発への移行を計画している場合は、3D 開発への移行が容易になります (ほとんどの基本は既にあるため)。

非 Python ルートを選択する場合は、SDL_gfx (プリミティブ用)、SDL_ttf (テキスト用)、SDL_net (基本ネットワーク用) などのアドオン ライブラリと共に、SDL を C/C++ で直接使用できます。C/C++ のもう 1 つの優れた広く使用されている代替手段はAllegroです。私は両方を使用しましたが、どちらを使用するかは主に好みの問題であると主張します.

于 2012-08-18T07:20:24.607 に答える
1

やりたいことには Pygame で十分です。Pygame は安定しており、Web サイトを見回すと、pygame でコーディングされたゲームが見つかります。どのタイプのゲームを実装しようとしていますか?

于 2012-08-18T06:41:03.377 に答える