質問

まとめ:

ホイールを再発明することなく、Cで「太いクライアント」ゲームをプログラムできますか, 、または弾丸を噛んで、ライブラリまたはSDKを使用する必要がありますか?私は中程度のCプログラマーであり、ポインター、データ構造、メモリの場所などを扱うことを恐れていません。もし それは私が必要とするコントロールを私に与えるでしょう 優れた「シッククライアント」ゲームを作りましょう。しかし、私は避けることを考えています 高水準言語とフレームワーク 権力と支配のために、 ない使いやすさ。

いつかサイド プロジェクトとして 2D 格闘/プラットフォーム ゲームをいじることに興味があります。私は主に Linux サーバーサイド プログラマーで、Python、Ruby、PHP の経験があります。これらの言語のいくつかには、次のような優れたフレームワークがあることは知っています。 パイゲーム. 。私は、人々が Air や .NET などで成功を収めていることも知っています...しかし、いくつかの懸念があります。

  • パフォーマンス:スクリプト言語は遅いことで有名です。リアルタイム ゲームを作成している場合は、できるだけサクサクと動作させたいと考えています。
  • 巨大なバイナリ:.NET などのフレームワークや Ruby などのスクリプト言語を使用すると、通常は必要のない大きな CLR やライブラリが作成されることがよくあります。私が作りたいゲームは小さくてシンプルなものです。CLR がゲーム自体より大きくなるのは望ましくありません。
  • 余分なもの:正直に言うと、自分のコードをもっとよく理解できれば、大きなゲーム ライブラリの荷物を継承するという考えは好きではありません。

私がこの質問をしているのは、私が Not Invented Here 症候群に非常に罹りやすいことを知っているからです。私はいつも自分でプログラムしたいと思っていますが、きっと多くの時間を無駄にしていると思います。ただし、これは私にとって非常に頻繁にうまくいきます。たとえば、 レール (ORM と GUI ツールキットが組み込まれた非常に大きな Web プロジェクト フレームワーク)、私は次のような小さな Ruby ツールの配列を使用しました。 ラック そして 続編 美しく調和しています。

そこで、SO 専門家の皆さんにお願いします。私は世間知らずなのでしょうか?私の見方は次のとおりです。

  • Cを使用する
    • 短所
      • きっとプログラミングが嫌いになるだろう
      • 車輪の再発明の高いリスク
      • 時間がかかりすぎて興味を失ってしまうリスクが高い
    • 長所
      • 実証済み - ほとんどの A リスト ゲームは C で実行されます (これは現在でも当てはまりますか?)
      • メモリ管理、速度、資産管理などを高度に制御できるため、自分自身でそれを扱えるようになると信じています。
      • クラフトはありません
  • フレームワークまたはSDKを使用する
    • 短所
      • 成果物が大きすぎるリスク
      • ゲーム開発のあらゆる面でオリジナルのライブラリ作成者に依存しています。必要な機能がない場合はどうすればよいでしょうか?自分でプログラムする必要がありますが、それは悪いことではありませんが、そもそも高レベルのフレームワークを使用する目的を部分的に無効にしてしまいます。
      • パフォーマンスの問題が発生するリスクが高い
    • 長所
      • 開発時間が大幅に短縮されました
      • メンテナンスが楽になるかも知れません
      • 共通のパラダイムを再発明するのに時間を無駄にすることはありません

このリストに他に何を追加できますか?それは純粋な判断によるものでしょうか、それとも誰かが私に代わって契約を締結してくれるでしょうか?本の提案は大歓迎です。

役に立ちましたか?

解決

現在の考え方は次のとおりです。

  • プログラミングを学びたい場合は、基本要素から上に向けてゲームエンジンの作成を開始します(基本的なデータ構造(リスト、マップなど)を実装します)。私は一度これをやったことがありますが、それは学習体験でしたが、多くの間違いを犯しました。ただし、プログラミングの方法を学び、クールなものを作成して結果を確認するには、これを高く評価します。

  • 適切なゲームを作成する場合は、必要なライブラリを使用し、すべてのゲームインフラストラクチャを自分で設計します。これは私が今やっていることであり、STL、ATL / WTL、Boost、SQLite、DirectXなどのすてきなものをすべて使用しています。これまで、ミドル/ゲームロジックの側面について多くのことを学びました。コードとデザイン。

  • アーティストや他の人々と協力して完成品を作成するゲームを作成する場合は、既存のエンジン(OGRE、Irrlicht、Nebula、Torqueなど)のいずれかを使用し、ゲームロジックを追加するだけですとアート。

私が学んだ最後の知恵の1つは、Not Invented Here症候群について心配しないことです。他のライブラリ(STL、Boost、DirectXなど)の開発時間は1桁(または3倍)多いことに気付きました。ゲーム/エンジンの。したがって、これらのことを自分で実装する唯一の理由は、それらについて学びたい場合です。

他のヒント

あなたは誤解のもとで働いていると思います。

ゲームプログラミング専用のフレームワークがいくつかあります---ゲームデザインの複雑さに多くの経験を持つ人々によって書かれたもので、ほぼ間違いなくあなたがします。

つまり、「パフォーマンスの問題のリスクが高い」ということです。フレームワークを使用しない場合。

pyglet を試すことをお勧めします。

  • openglを利用しているため、パフォーマンスが優れています
  • コンパクトなオールインワンライブラリ
  • Python以外の追加の依存関係はありません

いくつかのテストを実行し、十分に高速化できるかどうかを確認します。下位レベルに移動しないことを自分に証明した場合のみ。とはいえ、私はpython + pygletで処理できると確信しています...最悪の場合、いくつかのC拡張機能を作成する必要があります。

今日、あなたは、特に限界を押し広げる何かをしようとしない限り、パフォーマンスの問題を安全に無視できる時点にいると信じています。たとえば、ゲームがQuake IIほど複雑ではない場合、自分の時間を最大限に活用できるツールとライブラリを選択する必要があります。

Quake IIを選んだのはなぜですか? .NET用にコンパイルされたバージョンで実行されているため、ソフトウェアレンダラーを使用して、現在のマシンで許容されるフレームレート。 (必要に応じて、複数のプロセッサとグラフィックスハードウェアを許容可能な速度でエミュレートするMAMEを比較してください)

エンジンを構築するために、またはゲームを構築するために、これにいるかどうかを自問する必要があります。ゲームを作成することが目的の場合は、確立されたゲームエンジンを必ず見てください。 2Dゲーム開発の場合は、 Torque Game Builder をご覧ください。それは非常に強力な2Dゲームエンジン/ SDKであり、1日目から実稼働に移行します。これらには、統合する多くのツール、コンテンツパックがあり、変更や学習を行う場合は完全なソースコードを取得できます。使い方。また、Mac OSX互換であり、コミュニティにLinuxバージョンがあります。

コンソール側で何かを探しているなら、彼らもそれを持っています。

XNA について誰も言及していないことに驚いています。マネージドDirectXプログラミングを行うためのDirectXを中心に構築されたフレームワークであり、低レベルのDirectXプログラミングの綿密さと冗長性の多くを取り除きます。

パフォーマンス面では、ほとんどの2Dおよび3Dゲームタスク、特に格闘ゲームのようなものを構築する場合、このプラットフォームは非常にうまく機能します。ベアメタルのDirectXプログラミングを行っているようにほど高速ではありませんが、管理された環境で非常に近くなります。

XNAのもう1つの優れた利点は、ほとんどのコードをXbox 360で実行でき、ゲームがXboxで実行されていた場合はネットワーク接続を介してデバッグできることです。 Xboxゲームは、Xbox Liveアーケードでの配布および販売についてもXbox Liveチームによって承認されるようになりました。そのため、プロジェクトを商業的な状態にすることを検討している場合は、自由に利用できる配布手段があるかもしれません。

すべてのMS開発ツールと同様に、ドキュメントとサポートは一流です。多くのチュートリアル、既存のプロジェクトなどがある大規模な開発者コミュニティがあります。

コンソールでゲームをプレイしたいですか?学習体験としてやりたいですか?最終製品をクロスプラットフォームにしたいですか?これまでにどのライブラリを検討しましたか?

2Dゲームの場合、パフォーマンスが問題になるとは思わないので、最短時間で画面に結果が表示されるものを使用することをお勧めします。 Pythonの経験が豊富な場合は、pyGameが適しています。

将来いくつかの3Dゲームを行う予定がある場合は、Ogre( http://をご覧になることをお勧めします。 www.ogre3d.org )。グラフィックAPIを抽象化するクロスプラットフォームの3Dグラフィックエンジンです。ただし、2Dプロジェクトの場合はおそらくやりすぎです。

現在、A-listゲームの最も一般的な実装言語はC ++であり、多くのゲームはゲームイベントスクリプト用のスクリプト言語(PythonやLuaなど)を組み込んでいます。

ゲームの作成に使用するツールは、ゲームを作成する理由と要件に大きく関係しています。これは、他のプログラミングプロジェクトとまったく同じです。それがサイドプロジェクトであり、あなたが自分でそれをやっている場合、あなただけがこれに費やす必要がある時間とパフォーマンス要件が何であるかを評価することができます。

一般的に、今日のPCはスクリプト言語で書かれた2Dプラットフォーマーを実行するのに十分高速です。スクリプト言語を使用すると、より速くプロトタイプを作成でき、ゲームプレイを微調整する時間が増えます。繰り返しますが、これは他のプロジェクトと同じです。

C ++を使用していて、その理由が「私がしたいから」よりも複雑である必要がない場合レンダリングとオーディオのサポートについては、SDLをご覧になることをお勧めします。少し簡単になります。

基礎となる技術を学習したい場合(DirectX、または何らかのひねくれた理由で最適化されたブリッターを作成したい場合)、ぜひともC ++を使用してください。

これらすべてを述べましたが、時期尚早な最適化に対して警告します。 2Dゲームの場合は、最初にPythonとPyGameを使用する方が良いでしょう。これらのツールが最新のPCでは不十分であることが判明した場合、私は驚くでしょう。

C/C++/Python について人々が何を言っているかについては、私はゲーム開発者であり、私の会社では C を奨励しています。b/c C++ が悪いわけではありませんが、下手に書かれた C++ は、C に比べて読み取り/デバッグが難しいため、ゲーム開発にとっては有害だからです。(C++ は適切に使用すると利点が得られますが、若い人が C++ を使用して間違いを犯すと、膨大な時間が費やされます)

実際の質問に関しては:何かを動作させることだけが目的の場合は、ライブラリを使用してください。

それ以外の場合は、非常に重要な理由から自分でコードを作成します。 練習する
データ構造の操作を練習します。自分のデータを管理する必要がある場合があります。ユーティリティ コードのデバッグを練習します。

多くの場合、ライブラリは必要なことを実行し、優れていますが、場合によっては あなたの 特定の使用例はライブラリによって非常にうまく処理されないため、独自に作成することで大きなメリットが得られます。これは特に PC と比較してコンソールで顕著です

(編集:) スクリプトとガベージコレクションについて:それ 意思 コンソールであなたを殺してください。最近のゲームでは、必要を満たすために Unreal 上のガベージ コレクションの大部分を書き直す必要がありました。 編集者 部分。実際のゲームでは (私だけではなく) さらに多くのことを行う必要がありました (公平を期すために言うと、私たちは Unreal の元の仕様を超えていましたが)

多くの場合、スクリプトは優れていますが、「私が勝ちます」ボタンではありません。一般に、プラットフォームの限界に挑戦すると、利益は消えてしまいます。スクリプトがどの程度適切かを判断する際の評価関数として、「余裕のあるプラットフォーム CPU の割合」を使用します。

C / C ++ / obj-Cを優先する考慮事項の1つは、さまざまな関心分野のさまざまなライブラリを組み合わせて一致させることができるということです。言い換えれば、フレームワークでの機能の実装にこだわることはありません。

私のゲームでこのアプローチを使用しています。 chipmunk を2D物理、埋め込みスクリプト言語としてのLua、およびopenGL ES実装に使用するアップルから。これらすべてをC言語で結び付けるための接着剤を書きます。最終製品は、ゲームオブジェクトを定義し、それらのインスタンスを作成し、Luaに公開されているC関数で相互作用するイベントを処理する機能です。このアプローチは、多くの高性能ゲームで使用され、多くの成功を収めています。

C ++をまだ知らない場合は、スクリプト言語を使用することをお勧めします。ゲームを最初から最後まで作るには多くのモチベーションが必要であり、同時に新しい言語を学ぶように強制することは、興味を失うほど物事をゆっくりさせる良い方法です(ただし、新しい言語を学ぶには良い方法です)言語...)。

ほとんどのスクリプト言語はとにかくバイトコードにコンパイルされるため、パフォーマンスの最大のヒットはガベージコレクションになります。ヒットガベージコレクションの大きさについて明確な説明をするのに十分な経験はありませんが、小さなゲームではそれほど悪くないはずだと思いがちです。

また、既存のスクリプト言語ライブラリを使用してゲームを作成する場合、パフォーマンスの重要な領域(グラフィックなど)のほとんどは、とにかく(できればゲームライブラリによって)C ++で記述できます。したがって、プロジェクトのほとんどがPythonで記述されているにもかかわらず、CPUの80%が実際にはC ++コードに費やされる可能性があります。

もっと欲しいものを自問してみましょう。最初から最後までゲームを書いてゲーム開発について学ぶか、新しい言語を学ぶ(C ++)。ゲームを作成する場合は、スクリプト言語で作成します。新しい言語を学習したい場合は、C ++で実行してください。

ええ、ゲームの作成に関する詳細をすべて知りたいのでなければ、ゲームエンジンを使用して、グラフィック、オーディオ、リソース管理など。

個人的には、 GarageGames のTorque Game Builder(別名Torque 2D)をお勧めします。ただし、ニーズに合った無料のゲームエンジンを見つけることができるでしょう。

最新のゲームのほとんどは、CではなくC ++で行われていると確信しています(C ++で質問したことのあるすべてのゲーム会社)。
物理学+衝突、サウンド、グラフィックエンジンなどにC ++と既存のライブラリを使用しないのはなぜですか。ゲームを作成しますが、ありふれたものは処理されます。

抽象化の問題にはさまざまな解決策がたくさんあり、それぞれがさまざまな方法で対処しています。

現在のプロジェクトでは、C#、DirectX 9、HLSL、SlimDXを使用しています。これらはそれぞれ、慎重に調整された抽象化レベルを提供します。 HLSLを使用すると、作成中のシェーダーコードを実際に読み取ることができ、SlimDX / C#を使用すると、ポインター、循環依存関係、アンマネージコードの処理を無視できます。

とはいえ、これらのテクノロジーはどれも私のAI、照明、物理学の開発のしやすさに影響を与えません!まだ高レベルのフレームワークではない方法で教科書を解体する必要があります。

XNAのようなフレームワークを使用しても、ほとんどのビデオゲーム開発の概念があなたにとって異質なものである場合、まだ多くのことを理解して学ぶ必要があります。 XNAを使用すると、ジンバルロックをきちんと回避できますが、基本的なシェーディングの概念を理解していない人は困惑します。一方、DarkBASICのようなものはジンバルロックの問題を解決しませんが、シェーディングはほとんどあなたのために処理されます。

これは、最初のエンジンが実際に使用するエンジンにならないほど十分に大きいフィールドです。自分で書いたとしても、十分に書けません。サードパーティのライブラリを使用している場合、あなたを困らせる側面が確かにあり、あなたは置き換える必要があります。

アイデアとして、さまざまなライブラリ/フレームワークを使用して(XNAを使用したくないと判断しても間違いなくXNAを停止することは、素晴らしいベンチマークです)、さまざまなプロトタイプを構築しようとする価値があります。おそらく、風景(水域のある)または宇宙物理学のデモです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top