C ++ゲームプロジェクトに推奨するスクリプト言語は何ですか?[閉まっている]


14

ここでスクリプトを作成するということは、構成データをスクリプトに入れるだけでなく、一部のクラスメソッド、特定のゲームループなどのプロジェクトの一部をスクリプト化することを意味します。これは開発を加速するだけでなく、プレイヤーがこれらの一部を見ることができるようにすることですゲームのいくつかの側面を調整するスクリプト。

Luaのような一部の言語にはluabindのようなラッパーがありますが、過去に使用した場合、継承のコンテキストでメソッドの再定義をサポートしていないため問題がありました。

使用する/使用しない言語/ラッパーの提案は何ですか?

回答:


9

Luaスクリプトビデオゲーム
Luaスクリプト可能なゲームエンジン

Luaが最高のショットだと思います。

この記事では、LuaとC ++の統合について説明します。それは言います:

LuaBindは素晴らしい製品ですが、私には複雑すぎるように見えました。1つは、クラスとオブジェクトがどこにあるかを追跡するのは簡単ではないコードです。また、テンプレートを使用してLuaをwxWidgetsアプリケーションに統合することを望んでいたことも少し気になりました(クロスプラットフォームの問題はwxWidgetsサイトで読むことができます)。

他にも多くのバインディングライブラリがあります。

http://luabridge.sourceforge.net/
http://www.stackedboxes.org/~lmb/diluculum/
http://cpplua.sourceforge.net/
http://www.tecgraf.puc-rio.br/~セレス/トルア/

最高のC ++ / Luaラッパーは何ですか?

選択してお楽しみください。


はい、Luaは非常にシンプルで、Cとの統合が非常に簡単です。実際、それが組み込み言語であるLuaの主な目的です。
マルコムスタピック

LuaBind上の参照のためのおかげで、多分他の結合ライブラリに掘りが再びLuaのを取るために私を納得させるでしょう
フレデリック・Imbeault

ただし、メインスレッドでのみスクリプトを実行し、パフォーマンスが懸念される場合はプールアロケーターを提供することをお勧めします。
キロタン

5

私はChaiscriptが好きでした。私はそれを非常に長い間使用していませんが、これまでのところかなり安定しているようです。

Pythonやluaとは異なり、C ++で使用するためにゼロから構築されています。バインディングプロセスは、luabind / etcを使用する場合よりもずっとクリーンに見えます。

ウェブサイトの概要は次のとおりです。

ChaiScriptは、C ++の互換性を考慮してゼロから設計された最初で唯一のスクリプト言語です。これは、ECMAScriptにヒントを得た組み込みの機能的な言語です。

ChaiScriptはBSDライセンスの下でライセンスされています。


面白い。パフォーマンステストはどうですか?ChaiScript / Lua / Pythonの比較はありますか?
topright

非常に興味深いことですが、これまでに経験した欠点/バグ/パフォーマンスの問題はありますか?
フレデリックインボー

私はベンチマークを見ていませんが、パフォーマンスの問題はまだありません...これまでの私の主なグリップは、暗黙的に数値型間で変換しないことです(したがって、intを渡すとエラーが発生しますフロートをとる関数など)。
ライリーアダムス

1
このコメントは現在6年目であるため、参考までに、ChaiScriptは暗黙的な数値変換を行うようになりました。
lefticus

5

Luaをお勧めします
Pythonも非常に人気があります。多くの機能を備えたゲームエンジン(Blenderなど)が使用します。
C ++ :: Boostには、Pythonで動作するライブラリがありますSquirrel
について読みましたが、使用しませんでした。

このGame Engineの概要を読むことができますScripting列があります。LuaとPythonが最も一般的なスクリプト言語であることがわかります。


Boostについては、おそらく巨大なライブラリであり、すべてのプロジェクトで多くのことはあまり役に立ちません。実際、luabindはBoostを頻繁に使用しますが、これは私が気に入らないことの1つです。
フレデリックインボー

1
利点だと思います。すぐに使用できる多くのソリューションがあります。そして、あなたのプロジェクトにはたった一つの外部依存があります-Boost。更新、コードとの同期、および保守が困難な小さなライブラリ(異なるスタイル、アプローチ、ライセンスを使用し、外部の暗黙的な依存関係を持つライブラリ)は多くありません。
topright

1
また、必要なBoostライブラリ(ヘッダー)のみを含めます。Boostは巨大ですが、これが必要になるまで気にしません。
右上

pythonとLuaについて、クラスメソッドの再定義、新しいメソッドの作成などを可能にするC ++のラッパーがありますか?また、この機能は(セキュリティのために)C ++コードから制御できますか?先ほど言ったように、LuaBindはこれらのことを行いますが、継承のコンテキストでは失敗します。これはゲームプロジェクトでは非常に一般的です。私はexempleのためのものに再定義したい方法は、特定のゲームループ、プレイヤーのようなエンティティの更新方法、ゲームの世界自体、などの更新方法をテストする
フレデリック・Imbeaultに

Luaにはクラスとオブジェクトはありませんが、テーブルによってエミュレートできます。私が好むOOP用のLuaライブラリは、love2d.org / wiki / MiddleClassです。
右上

4

独自に構築してみませんか?

時間、忍耐、学習意欲があれば、必要なすべての機能と構文を備えた独自のスクリプトエンジンをいつでも開発できます。

長所

  1. コンピューターサイエンスの興味深い部分について学びます。
  2. 「社内」スクリプティングエンジンを開発することにより、必要に応じてエンジンをカスタマイズできるため、最初から最後まで完全に制御できます。
  3. 後で変更を加える必要がある場合は、他の人のインとアウトを学習するよりも、自分のコードベースのインとアウトを知るのが多少簡単になります。
  4. 他の誰かのパッチでエンジンを最新の状態に保つことを心配する必要はありません。

短所

  1. 時間。多くの人はそれを持っていません。今すぐ何かが必要な場合は、既存のエンジンを試してください(既に提案されているエンジンの1つなど)。

  2. 速度。既存のスクリプトエンジンの多くは非常に高速です。カスタムソリューションはそれほど高速ではない場合があります。

  3. チームサイズ。多くの既存のスクリプトエンジンには、プライベートチームであれグローバルボランティアであれ、コードベースで作業する大規模なチームがあります。他の多くの人がチェックおよび再チェックするコードについては、言わなければならないことがあります。

  4. スクリプティングエンジンでは、効果的にプルするために、ある程度の初期計画が必要です。実際にスクリプトエンジンとはまったく関係ないかもしれない、実装する必要がある多くの基礎があります。

  5. プレイヤーベース/開発者は、スクリプトエンジンに慣れる必要があります。構文と機能がほとんどの最新のスクリプトエンジンとほぼ同じである場合、これは問題にならないかもしれませんが、注意してください。

これは決して完全なリストではありません。既存のスクリプト言語のバックエンドに大量の変更を加えて必要な機能を取得する必要がある場合、IMOは、要件にさらに近い別のエンジンを探すか、独自のエンジンを構築する必要があります。

私は人々が「怠laz」や「車輪を再発明しないでください」を放り投げることを楽しんでいることに気づきましたが、このことをどのように行うかについて学ぶべきことがあると思います。また、一般的な実装よりも特定の実装の方がおそらくプロジェクトに適しています。

「C ++でのスクリプトシステムの作成」は、トピックについて議論するときに人々が共有する好意的な記事のようです:http : //www.gamedev.net/reference/list.asp?categoryid=76


2
これには特別な教育上の利点があることに同意しました。それでも、プログラミング言語の理論(多くの人は自分が持っていると思う)の知識とスキルと、コンピューティングの理論の知識が必要です。これが誰かにアピールする縫い目に答える場合、私はこれらの2冊の本をお勧めします:amazon.com/gp/product/0136073476/ref=oss_productおよびamazon.com/gp/product/0534950973/ref=oss_product
フレデリック・インボー

ただし、これらのことを実際に知らなくてもどこまで行けるかに驚かれることでしょう。多くのMUDには、条件付きを有効にするいくつかのハックを備えたステートメントのリストにすぎないスクリプト言語がありますが、それだけで多くのことを達成できます。
キロタン

そこに行って、それをしました。構文解析、コンパイラー設計、バイトコードマシン、その他すべてについて多くのことを学びました。次回は、おそらくLuaを使用し、さらに感謝します。:)
カズドラゴン

2

Lua、Python、Scheme、Squirrelを試しました。Luaは最善を尽くしました。Squirrelよりも大きなコミュニティと優れたサポートがあり、Pythonよりもメモリとパフォーマンスの特性がはるかに優れています。Schemeも非常にうまく機能し、非常に小さなインタープリターを備えていますが、デザイナーが関数型言語に頭を悩ますことは困難でした。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.