Goでゲームを開発していますか?[閉まっている]


40

Googleの新しいGo言語はまだ初期段階にあり、実際の使用やサポートがまだ普及していない。それでも、有望な実験のように思われ、ゲーム開発に未来があるのではないかと思います。私は他の場所でGoのゲーム固有の議論を見つけることができず、CWの議論が適切であると考えました。

いくつかの考え:

  • golang.orgによると、Goプログラムは「同等のCまたはC ++コードとほぼ同じ速さで実行されます」-十分に速いですか?
  • Goのガベージコレクションはゲームに適していますか?
  • 並行ゴルーチンの土地でゲームを作成するためにどれだけの精神的な再調整が必要ですか?
  • Goは「システム」レベルの言語と呼ばれることが多く、サーバーソフトウェアが例として挙げられています。これを聞いたときに、マルチプレイヤーゲームサーバーを考えないことは困難です。

あなたの考え?


1
私はGOに精通していない、誰もが実際にちょうどビーイングは、あなたの答えは、この言語への一般的ではなく、特定のであるならば、私はそれは問題ではないと思うと述べたことを考えると、「思考」に基づく応答とは対照的に、応答する前にリンクをたどるために助言します
lathomas64

1
外出先でゲームを作成できるかどうか(ゲーム):P
RCIX

4
Go」が完全に回転したと見なされるかどうかは不明です(その後、人間が操作します)。ただし、保管スペースは非常に限られています(少なくとも規制ボードを使用している場合)。
デビッドC.ビショップ

DavidC.Bishopおかしい... @
ブライアン・オルティス

1
goゲームエンジンを作成する場合、より「従来の」言語で使用するのと同じように使用して既存のものをコピーするのではなく、言語の機能を利用してください。

回答:


34

あなたの質問に対する私の見解:

  • 言語は十分に速いです。遅いJava言語は、ゲーム開発に使用されます。Python(pygame)でさえゲーム開発に使用されており、Javaよりもかなり低速です。それはすべて、ゲームのタイプと、それがどのようにプロセッサに集中しているかに依存します。
  • 一般に、ガベージコレクションはゲームにはあまり適していません。ただし、Goには特に問題のあるガベージコレクションシステム(マークアンドスイープ)があり、これにより、データをクリーンアップしながら世界を停止します。対処するのは困難であり、ストップアンドゴーのフレームレートが発生します。
  • ゴルーチンでゲームを作成するには、かなりの量のメンタルリツールが必要です。グラフィックスとロジックは、従来の意味で並行することはできません。しかし、より小さなレベルでは、ロジックの一部は並行ゴルーチン(AI決定の並列処理、パーティクルシステムなど)の優れた候補です。
  • 実際、マルチプレイヤーゲームサーバーはGo言語の優れた候補になる可能性があります。

私の意見では、あなたが言語でゲームを書くことを試みる強い衝動を持っているならば、それのために行きなさい。明らかにあなたがそれを検討しているなら、あなたはそうすることへの情熱を持っています、そして、なぜあなたは規範に順応するように強制する代わりにその情熱に従ってください。もっと多く言うことができますが、「Rubyはゲーム開発に適した言語ですか?」


6
「特に悪いガベージコレクションシステム(マークアンドスイープ)」マークアンドスイープは本質的に世界を停止しません。たとえば、Javaには並行マークアンドスイープコレクタがあり、Luaは長い間素朴なものを使用していました-一時停止の長さの多くは、注意深い世代システムを介して制御できます。そうは言っても、Go's ストップ・ザ・ワールドのマークアンドスイープです。しかし、後者ではなく前者がゲームの問題です。(Rubyスレッドには、これについても奇妙な主張がありました。)

1
現在のGo GCシステムは、プレースホルダーのようなものです。「現在の実装は、単純なマークアンドスイープコレクターですが、代替品が開発中です」(golang.org/doc/go_lang_faq.html#garbage_collection)。交換オプションについて説明しました。私はこの問題に関する確固たる決定を知りません。
TSomKes

1
ジョー、明確にしてくれてありがとう!私はそれを知りませんでした。ええ、TSomKes、私はそれを見たので、Goがいつかより良いガベージコレクタを実装することを期待し続けることができます。
リケット

4
現在のGoガベージコレクターに関しては、上記の回答は古くなっていることに注意してください。Go 1.5ではまったく異なるボールゲームです。これがどれほど心配なのだろうか。
ジョナス

3
go 1.8では、GCは100μsの同時ストップワールドに削減されます。groups.google.com/forum/#!topic/golang-dev/Ab1sFeoZg_8
Dolanor

17

Go for OSXで小さなグラフィックスを作成しました(グラフィックウィンドウにOpenGlを使用)。私はC ++ゲームエンジン(http://morganjeff.weebly.com/)の経験があり、Goが提供する機能のいくつかを読んだ後にGoを試してみることにしました。

Go 1.1リリースの時点で、goはゲームエンジンを作成するために必要なほとんどの機能をサポートしています(エンジンがエディターを示唆するゲームコアであり、そうではない)。

  • メンバー関数バインディング(メッセージングシステム用)
  • Reflectionが組み込まれています(シリアル化、外部ツールのサポートなどに役立ちます)
  • インターフェイス(システム、コンポーネントなどの多態的な動作を実装するため)

Goを使用するメリット(大規模プロジェクトの場合):

  • テストは言語に組み込まれています(これにはベンチマークテストといくつかのアサーションが含まれます)
  • 例は言語に簡単に追加できます(そして、正確性のためにコンパイルされています)
  • アーキテクチャ固有のコードは簡単に追加できます(ファイルの命名規則を使用)
  • プロファイリングは言語に組み込まれています
  • インポートのビルトインバージョン管理(大規模なバイナリをソースとは別のリポジトリに追加し、バージョン管理された最新の状態に保つことができます)

一般にGoを使用する利点:

  • リファクタリングが簡単なコード
  • Goはスレッド化をサポートしています(C ++とは異なり、その上に階層化されています)
  • 超高速のコンパイル速度により、スクリプト言語サポートの必要性が軽減されます。
  • 静的型付けシステム(インターフェイスは、暗黙的に別名鴨型付けによって満たされます)
  • 複数の戻り値、名前付きパラメーター、タグ付き構造体属性
  • 優れた組み込みツールとドキュメント
  • 管理言語

Goを使用する場合の欠点:

  • マクロやテンプレートはありません
  • より成熟した言語のライブラリサポートはありません
  • 管理言語(意図的に2回リストされています)
  • IDEなし

生メモリをgoで取得する方法(「安全でない」をインポートする)があります。goプログラムをメモリと速度についてプロファイルする方法を示す記事をリンクします。全体として、Goがそれが現代のCであるという主張は非常に真実のようです。(私が述べたよりもはるかに多くの理由で)「スマートに」設計されており、さらに重要なこととして、十分に文書化されていると思います。Goで設計されたエンジンは、C ++で設計されたエンジン(まだ慣れているもの)とは少し異なりますが、GoエンジンはC ++で実際に解決されていない多くの問題を解決します(つまり、並列処理、 C ++言語の複雑さ、および継承の誤用)。

ここに私が約束した記事があります:http : //blog.golang.org/2011/06/profiling-go-programs.html

-ジェフ


GoSublimeでSublimeを試してみてください。それは本当にIDEのように感じられ、多くの(すべてではないにしても)Java用のIDEよりも反応的です。
アルネ

1
「インポートのビルトインバージョニング」が意味することを指定できますか。go言語自体のバージョンタグについては心配です。
アルネ

@jmorgan Go 1.2以降の視点の変更とGo 1.3の今後の変更を確認しますか?
イルミネート14年

@Arne:いいね!私はGoSublimeが大好きです。IDEを使用しないということは、ビジュアルデバッガーを取得するにはgogdb(優れたツール)を使用する必要があるということですが、ビジュアルスタジオほど優れていません。パッケージの依存関係とバージョン管理について私が意図したことは次のとおりです 。golang.org
cmd

@ylluminate:正直、Goはどんどん良くなっていると思います。テストカバレッジパッケージが付属しているため、テスト済みのものとそうでないものをすばやく確認できます。適切なテストスイートを用意しておくと、私の生活がずっと楽になることがわかりました...これは私にとって大きな機能です。Go 1.3では、バイナリサイズと実行速度(特にガベージコレクター)が改善されるようです。
jmorgan

4

他に考えるべきことは、Goはまだ比較的新しいため、ゲーム開発で使用される多くの一般的なライブラリのバインディングがまだない可能性があるということです。


間違いなく。たとえば、2つのGo / SDLプロジェクトに出会いましたが、そのうちの1つは放棄されたようです。どちらか一方を使用する(比較的小さな)ほんの一握りのゲームを見つけました。
TSomKes

1
github.com/go-glを必ずチェックしてください。これはSDLではありませんが、OpenGlを使用する場合の優れた代替手段です。ベクターにはgithub.com/Jragonmiris/mathglがありますが、バグが見つかりました。GoのmakeはCライブラリをラップするのが非常に簡単で、makefileはまったく必要ありません。Cヘッダーファイルをインポートして、その機能を直接使用することもできます。
アルネ

0

ゲームを開発するためにGoを使用しないでください。それは首の周りのアホウドリになります。ゲーム開発用のツールチェーンは、あなたが物事を書く言語よりもはるかに深く拡張しているので、何かを確立しただけではそこにはない障害物を毎ターン見つけるでしょう。

誤解しないでください。新しい言語で遊ぶのが大好きですが、ゲームにコミュニティとサポートのある言語を選ばせようとすると、はるかに良くなります。


9
一方で、小さなインディープロジェクトで新しい言語で遊ぶためにハードコードするだけの場合、「ツールチェーン」を心配することは過大評価されています。

2
ここで意見が合わない。ゲーム開発に関連するほとんどのものは、言語とは関係ありません。OpenGLについて質問することは、C C ++ GoまたはJavaでプログラムを作成するだけではありません。ところで、どのツールチェーンについて話しているのですか?そして、なぜ行くことは両立しないのでしょうか?
アルネ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.