11

概要:

ホイールを再発明せずに C で「シック クライアント」ゲームをプログラミングできますか? それとも、弾丸を噛んでライブラリまたは SDK を使用する必要がありますか? 私は中程度の C プログラマーであり、ポインタ、データ構造、メモリ位置などを扱うことを恐れません。優れた「シッククライアント」ゲームを作成するために必要な制御が得られるのであれば。 ただし、使いやすさではなく、パワーとコントロールのために、高級言語とフレームワークを避けることを考えています。

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

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

私はここで発明されていない症候群に非常にかかりやすいことを知っているので、この質問をしています. 私はいつもそれを自分でプログラムしたいと思っていますが、それは多くの時間を無駄にしていると確信しています. ただし、これは非常に頻繁にうまくいきます。たとえば、Rails (ORM と GUI ツールキットが組み込まれた非常に大きな Web プロジェクト フレームワーク) を使用する代わりに、 rackSequelなどの小さな Ruby ツールの配列を組み合わせて使用​​しました。美しく。

だから、私はあなたに目を向けます、SOの専門家。私は素朴ですか?これが私がそれを見る方法です:

  • Cを使用
    • 短所
      • プログラミング嫌いになりそう
      • 車輪の再発明のリスクが高い
      • 時間がかかりすぎて興味を失うリスクが高い
    • 長所
      • 実証済み - ほとんどの A リスト ゲームは C で行われます (これは今日でも正しいですか?)
      • メモリ管理、速度、資産管理などを高度に制御でき、自分で処理できると信じています
      • クラフトなし
  • フレームワークまたは SDK を使用する
    • 短所
      • 特大の成果物のリスク
      • ゲーム開発のすべての面で元のライブラリの作成者に依存しています。必要な機能がない場合はどうなりますか? 自分でプログラムする必要がありますが、これは悪くはありませんが、そもそも高レベルのフレームワークを使用する目的を部分的に無効にします
      • パフォーマンスの問題のリスクが高い
    • 長所
      • 開発時間を大幅に短縮
      • メンテしやすいかも
      • 一般的なパラダイムの再発明に時間を無駄にすることはありません

このリストに他に何を追加できますか? それは純粋な判断の呼びかけですか、それとも誰かが私のために契約を結ぶことができますか? 本の提案を歓迎します。

4

14 に答える 14

13

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

特にゲームプログラミングのためのいくつかのフレームワークがあります---ゲームデザインの複雑さについて多くの経験を持つ人々によって書かれています。

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

于 2008-10-24T20:53:11.337 に答える
8

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

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

  • 適切なゲームを作成したい場合は、必要なライブラリを使用し、すべてのゲーム インフラストラクチャを自分で設計します。これは私が今行っていることであり、STL、ATL/WTL、Boost、SQLite、DirectX などの優れたものをすべて使用しています。コードとデザイン。

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

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

于 2008-12-19T15:13:18.200 に答える
7

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

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

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

于 2008-10-24T21:45:29.000 に答える
4

エンジンを構築するためなのか、ゲームを構築するためなのかを自問する必要があります。あなたの目的がゲームを作成することである場合は、確立されたゲーム エンジンを検討する必要があります。2D ゲームの開発については、Torque Game Builderを参照してください。これは非常に強力な 2D ゲーム エンジン/SDK であり、初日から本番環境に移行できます。2D ゲーム エンジンと統合するためのツールやコンテンツ パックが豊富にあり、変更や学習が必要な場合は完全なソース コードを入手できます。使い方。また、Mac OSX と互換性があり、コミュニティには Linux バージョンがあります。

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

于 2008-10-24T21:07:27.500 に答える
4

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

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

于 2008-10-24T20:47:32.907 に答える
4

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

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

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

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

于 2009-01-11T00:22:49.103 に答える
2

C/C++/obj-C を支持する考慮事項の 1 つは、さまざまな関心領域に対してさまざまなライブラリを組み合わせて使用​​できることです。言い換えれば、フレームワーク内の機能の実装に行き詰まらないということです。

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

于 2008-12-19T16:15:48.370 に答える
2

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

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

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

于 2008-10-24T20:41:25.197 に答える
2

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

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

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

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

基礎となるテクノロジー (DirectX、またはなんらかの理由で最適化されたブリッターを書きたい) を学びたい場合は、必ず C++ を使用してください。

そうは言っても、時期尚早の最適化に注意してください。2D ゲームの場合は、まず Python と PyGame を使用する方がよいでしょう。これらのツールが最新の PC では不十分であることが判明した場合、私は驚かれることでしょう。

于 2008-10-24T20:44:12.213 に答える
2

C/C++/Python について人々が言っ​​たことに関しては、私はゲーム開発者であり、私の会社は C を推奨しています。b/c C++ が悪いわけではありませんが、C++ の書き方が悪いため、読みにくいため、ゲーム開発にとって毒になります。 C と比較してデバッグします。

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

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

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

(編集 :) スクリプトとガベージ コレクションについて:コンソールでは致命的です。最近のゲームでは、エディタ部分のニーズを満たすためだけに Unreal のガベージ コレクションの大部分を書き直さなければなりませんでした。(私だけでなく) 実際のゲームではさらに多くのことを行う必要がありました (公平を期すために、Unreal の元の仕様を超えていましたが)。

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

于 2008-10-24T21:16:23.643 に答える
1

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

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

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

私は、あなたがもっと欲しいものを自問してみてください:最初から最後までゲームを書いてゲーム開発について学ぶこと、または新しい言語(C ++)を学ぶこと。ゲームを書きたい場合は、スクリプト言語で書いてください。新しい言語を学びたい場合は、C++で行ってください。

于 2008-10-24T21:00:37.513 に答える
1

ゲームを作るためのすべての詳細を学びたいだけでない限り、グラフィック、オーディオ、リソース管理、等

個人的には、 GarageGamesの Torque Game Builder (別名 Torque 2D) をお勧めします。しかし、ニーズに合った無料のゲーム エンジンもいくつか見つかるはずです。

于 2008-10-24T21:09:09.370 に答える
0

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

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

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

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

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

アイデアとして、さまざまなライブラリ/フレームワークを使用して(XNAを使用したくないと判断した場合でも、間違いなくXNAを停止の1つにすることは、優れたベンチマークです)、さまざまなプロトタイプを作成することをお勧めします。おそらく、風景(水域がある)または宇宙物理学のデモです。

于 2009-12-16T20:47:50.700 に答える
0

最近のゲームのほとんどはCではなくC++で行われていると確信しています(C ++の質問でインタビューしたすべてのゲーム会社)。
物理+衝突、サウンド、グラフィックエンジンなどにC++と既存のライブラリを使用してみませんか。ゲームですが、ありふれたものは面倒を見てくれます。

于 2008-10-24T20:50:02.230 に答える