どのC ++ GUIライブラリを提案できますか?[閉まっている]


26

私はC ++で独自のゲームエンジンを構築しています。現在、使用するユーザーインターフェイスを決定しています。

ライブラリを使用する必要がありますか?自分で作るべきですか?


3
あなたが何を意味するのか明確ではありません:ゲーム内GUI?またはツール用のGUI?それぞれが非常に異なる要件です
。– jacmoe

1
エンジン(壮大な音楽)
リケット

1
モーダルダイアログのみが必要な場合、sourceforgeの小さなファイルダイアログは、プロジェクトに追加する単一のC C ++クロスプラットフォームファイルです。初期化なし、メインループなし
-tinyfiledialogs

回答:


11

実際、QtウィジェットはOpenGLと統合でき、OpenGLはQt(QGLWidget)と簡単に統合できます。もちろん、プラットフォーム固有のウィジェットは探しているものとは異なる場合がありますが、心配する必要はありません。ウィジェットをカスタマイズする方法、独自のウィジェットを作成する方法、ニーズに合ったQt Quick(同様に統合できるはずです)。

興味のある方は、これらのリンクをお見逃しなく:ウィジェットは3番目の次元に入ります:WolfenQtOpenGLでウィジェットを加速する


9

独自のライブラリを作成する必要はないと思います。ゲームエンジンを作成するタスクはそれだけで非常に大きくなります。

ゲームエンジンの場合は、即時モードのGUIを使用します。詳細はこちら:http : //www.mollyrocket.com/forums/viewtopic.php?t=134

重要なアイデアは、コンポーネントを描画し、同時に相互作用を制御することです。

if (button(id, position, size)) 
{
    button_was_pressed();
}

たとえば、Unityは同様の概念を使用しています。

デモで使用されているNVIDIAによる実装を見つけることができます:http : //code.google.com/p/nvidia-widgets/


4
IM GUIは興味深い概念ですが、ゲームのようなことをしようとすると、ポップアップするいくつかの問題があることがわかりました。メニュー要素をイン/アウトでアニメーション化するには、すべてのウィジェットの個々の位置を変更するか、その呼び出しのGUI変換マトリックスを変更するなどの操作を行う必要があります。たとえば、アクションがその子などに変換されるWindowコンテナがあれば簡単です。また、何らかの理由で、ほとんどのIMGUI実装には「無効な」ウィジェット状態がありません。
Tetrad

@Tetrad:自動レイアウト、相対位置、または絶対位置を使用してウィジェットグループを実装するのは非常に簡単です(Nvidiaウィジェットはこれを実行します)。ウィンドウまたはパネル内にウィジェットを非常に簡単に含めることができます。「無効」状態の場合、なぜこれが簡単に実装されないのかわかりません。「ゲーム的なもの」の場合、ウィジェットはフレームごとに更新されるため、即時モードの概念は実際には保持モードよりも適していると思います。
オスカーN.

7

個人的には、CEGUIをお勧めします。それはオープンソースであり、かなり良いです。ただし、すべてを手作業で書き出すと、非常に冗長になる可能性があることに留意してください。

しかし、プラス面では、OpenGLとDirectXの両方のレンダラーがあります。私は通常使用するテンプレートの上にそれを置くことができました。テンプレートはVBOを使用してテクスチャに直接書き込みます(これは一種のハッキングです)。

問題のゲームは、ネットワーキングの割り当て用でした。割り当ては、ロビーを備えたネットワークゲームを行うことでした。ロビーが首の痛みになることは分かっていたので、ほとんどのことをしてくれた図書館を選びました。


これは私が現在使用しているものです。ただし、依存関係が多すぎることがわかりました。そして、私はそれを私のプロジェクトにリンクするのに問題がありました(IIRC、ライセンスはライブラリにしかリンクできないと言っていました)
MrValdez

6
それは持ってとんでもない依存関係の量を。私の小さなデモゲームが50 MBに膨れ上がりました!
knight666

何?私はあなたがそれを間違っていると思う:)私のゲームのCEGUI DLLの重量は3 MB未満です。MrValdezへ:CEGUIはBSDライセンスの下にあります
。– jacmoe

MITライセンス-申し訳ありません。CEGUIはMITライセンスの下にあります。:)
jacmoe

5

ほとんどのGUIライブラリ(QtはおそらくWindows専用ではない最も人気のあるC ++ライブラリです)の問題は、ほとんどがエンジンにうまく統合されないことです。従来のGUIアプリでは、GUIライブラリがメインループを制御し、イベントにコールバックを接続するだけでした。ゲームエンジンでは、通常、ループを制御する必要があるため、せいぜいトリッキーになることがあります。たぶん、描画コントロールやダイアログなどを、それを渡す3Dコンテキストに単に処理するものを探しているのでしょうか?それらを見つけるのははるかに困難です:-/


<pedantic> wxWidgetsもクロスプラットフォーム</ pedantic>ですが、エンジン統合についてはあなたの
主張

3
私は「最も人気がある」と言ったのは「唯一」ではなく、-P wxは最後に見た3Dコンテキストの操作に対するサポートがさらに少ないことです。
-coderanger

4

私はあなた自身で書くことを強く信じていますが、それでも私は非常にオールドスクールです。あなたがしたいことをするためにさらに別のGUIライブラリと戦うことは私を夢中にさせる傾向があり、ほとんどのゲームGUIは非常に些細であるという事実に追加され、MDIとスーパーOOデザインに全面的に行く必要はありませんボタンには、スクロール可能な親指でチェックボックスの横にあるタスクバーにカーソルを合わせたときに強調表示するスクロールビューを含めることができます。さまざまな人のためのさまざまなストローク。


「自分で書く」というのは、考えられるほど場違いではない状況があります。管理ゲームや複雑なアイテム管理を備えたRPGなど、UIが重要なゲーム。UIはエクスペリエンスの大きな部分を占めます。joelonsoftware.com/articles/fog0000000007.html それが中核的なビジネス機能である場合-何であれ、それを自分で行う
-v.oddou

3

調査する価値のあるオプションの1つは、WebKitを使用してユーザーインターフェイスをレンダリングし、すべてのUIをCSS / HTML / Javascriptで実行することです。

これは、オープンソースの実装(Berkelium)でありクローズドソースの商用実装(Awesomium)です。


5
WebKitとその近親者は、1秒間に1〜2回のリフレッシュレートを目指しており、アクション指向ゲームのHUDをそのように行うのは難しいかもしれません。ただし、メニューや遅いビットには最適です。
coderanger

1
@coderanger:JavaScript / HTML5でゲーム全体を書くことができます。WebKit / Chromeで60 FPSで正常に動作するChrome Web Store用の商用アクションゲームを公開しました。
ショーンミドルディッチ

3

IUP-ポータブルユーザーインターフェイスをお勧めします:http : //www.tecgraf.puc-rio.br/iup/

Luaプログラミング言語でのみ使用しましたが、非常に使いやすかったです。C、LED、Luaのフレーバーのみが付属していますが、簡単にラッパーを作成できます。


面白そうです。私はできるだけ早くそれをチェックアウトするつもりです。
MrValdez

3

私は自分のゲームプロジェクトで個人的にCEGUIを使用していますが、これは非常に堅牢なソリューションです。問題は、時々、変更する大量のファイルを少し変更するような気がすることです。

私は使用していませんが、libRocketは完全に無料になり、すべてのライセンス料金とその他の料金は削除されました。このlibの素晴らしい点は、html / css構文で記述することです。http://librocket.com


2

Windows用のゲームを開発する場合は、Win32 APIを使用して、興味深い提案を挙げてください。通常のウィンドウコントロールを使用するだけです(ATL / WTLライブラリを使用することをお勧めします)が、それらをオーナー描画にします。

このテクニックは、最初にアンリアルトーナメントゲームで使用され、公開されているヘッダー(MODメーカー向け)を調べています。

これを行う主な利点の1つは、Windows UIインフラストラクチャ全体を自由に使用できること、およびキーボードの繰り返し速度、マウスの感度、ダブルクリック速度などのユーザー設定を維持することです。また、ルールに従うと、インターフェイスは高速でちらつきがなくなります。

欠点は、独自のグラフィックスと効果を適用できるように、ウィンドウコントロールをサブクラス化してオーナー描画にするためのコードを記述する必要があることです。

これをアイデアとして捨てるだけです。


1
私は、Win32 / COMが...ハイ・パフォーマンスのために推奨しないVistaと勝利7上でエミュレートされると信じて
スティーブンFurlani

ゲームで使用するGUIの量に依存すると思います。メニューシステム専用の場合は、本当に気にする人、フレームレートの重要なセクションで広範囲に使用している場合は、いくつかの作業と思考が必要です。
デミン

@StephenFurlani Win32 / COMは、VistaおよびWindows 7ではエミュレートされません。ネイティブでフルスピードです。さらに、ATL / WTLはCOMに依存していませんが、DirectXは依存しています。
デミン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.