私にはC ++ゲームプログラミングの本があり、その中にLuaセクションがあります。Luaセクションを読み始めましたが、面白いように聞こえますが、C ++ゲームでLuaを使用することの長所と短所を判断することはできません。私が現在考えることができる唯一の利点は、再コンパイルすることなく、Luaを介してコーディングの更新を行うことができることです。それ以外は、何も考えられません。それでは、C ++ゲームにLuaを追加することの長所と短所は何ですか?
例をいただければ幸いです。
私にはC ++ゲームプログラミングの本があり、その中にLuaセクションがあります。Luaセクションを読み始めましたが、面白いように聞こえますが、C ++ゲームでLuaを使用することの長所と短所を判断することはできません。私が現在考えることができる唯一の利点は、再コンパイルすることなく、Luaを介してコーディングの更新を行うことができることです。それ以外は、何も考えられません。それでは、C ++ゲームにLuaを追加することの長所と短所は何ですか?
例をいただければ幸いです。
回答:
私が現在考えることができる唯一の利点は、再コンパイルすることなく、Luaを介してコーディングの更新を行うことができることです。
このユーティリティをそれほど簡単に割引しないでください。再コンパイルのステップを取り除くまで、あなたがどれほど生産的になるかを理解することは決してないでしょう。
「流れ」それが仕事に来るときかなりよく理解心理学的概念です。フローは、アクティビティに集中しているとき、ほとんど考えずに問題を分析して解決しているときなどに得られる感覚です。「フロー」しているときは、最も生産的です。
コンパイル時間はそれらすべてを台無しにします。何かをテストする間に10秒のコンパイルさえあれば、フローにとどまるのは困難です。
ゲームプレイを開発しているとき、通常持っているのは「タイトループ」です。アイデアがあり、テストをコーディングして、それが機能するかどうかを確認してから、試してみてください。動作しない場合は、変更して再試行してください。「コードをテストする」時間は、フローを維持するために非常に重要です。できるだけ小さくすることが重要です。
Lua(または埋め込みスクリプト言語)でできることは、「コンパイル」せずに変更をテストするだけでなく、ゲーム内で実行することです。ゲームのビルド方法に応じて、データを停止したり再ロードしたりすることなく、新しいスクリプトでゲームを再起動するコマンドを実行できます。再コンパイルする必要がないだけでなく、再実行する必要もありません。
適切なエンジンのサポートがあれば、これを実行できるため、生産性が大幅に向上します。
スクリプトのもう1つの大きな利点は、気にしないことです。C ++を書くのに長い時間を費やしているなら、minutaeにどれだけの時間を費やしているのかに驚くでしょう。メモリが削除される場所。これが解放される場所。shared_ptr
あらゆる場所で使用している場合でも、これらすべての変数の型名を入力するだけで動作が遅くなります。
動的に型指定されたスクリプト言語では、気にする必要はありません。スコープは簡単です。関数はファーストクラスのオブジェクトです。ファンクタを手動で作成する必要はありません。いくつかのことを行うのはとても簡単です。
あなたが規律のあるプログラマーでないなら、それは否定を持っています。Luaでグローバルを使用するのは非常に簡単です(それを防ぐ方法はありますが)。気遣わないということは、コードを書くときに非常にずさんなことができることを意味します。
しかし、再び、非常にずさんなことには利点があります。
Luaのもう1つの利点は、優れたデータ記述言語を作成できることです。JSONが単に配列/テーブルを構築して返すJavaScriptファイルであるように、テーブルを返すLuaスクリプトを作成できます。
これは構成ファイルに役立ちます。Luaのテーブル形式は、.ini形式よりもはるかに優れています。このフォーマットは、まだかなりきれいで、コンパクトで、拡張可能です。
ああ、それはまだLuaスクリプトなので、実際のロジックを実行できます。その欠点は...まあ、それはLuaスクリプトなので、実際のロジックを実行できます。ユーザーが物事を台無しにする可能性があるため、それはゲームで悲惨なものになる可能性があります。
しかし実際には、これは簡単に対処できます。Luaは埋め込み用に設計されているため、実際には分離は非常に簡単です。実際、新しいLua状態はデフォルトでは何も提供しません。最も基本的な標準Luaライブラリを公開するために、実際に何かをする必要があります。ファイルアクセス、ゲーム状態アクセスなどはすべてオプトインであり、オプトアウトではありません。また、各Luaの状態は互いに独立しています。AIスクリプトに使用するLua状態は、構成ファイルに使用するLua状態である必要はありません。
実際、多くのLua標準ライブラリを登録できるコードがありますが、すべてのファイルIOを削除して削除します。最終的に、Luaスクリプトベースの構成ファイルで発生する可能性のある最悪の事態は、メモリ不足でゲームを実行するとすぐにゲームがクラッシュすることです。また、これらの構成ファイルを手動で共有していないため、ハッカーにとってはあまり面白くないでしょう。
スクリプト言語の最大の欠点はデバッグです。ほとんどのスクリプト言語にはデバッガーがなく、Luaも例外ではありません。Luaには、デバッグツールの構築に必要なツールがすべて揃っています。しかし、実際にはデバッガが組み込まれていません。1つをまとめる必要があります。そして、それには合理的な程度の作業が必要になります。
または、「printfデバッグ」を使用して支払うことができます。それはあなたが書くLuaコードの量に本当に依存します。
勤務地:
長所:
luac -l
バイトコードの出力を解析し、バイトコードを覗いて分析を行うのは簡単です。特にコーディング規約がある場合は、ほとんどのluaソースファイルを解析することも非常に簡単です。地方大会を実施できます。ここでさらにパワーを得るために、metaluaを調べることもできます。lua_pcall
ます。短所:
step
ゲームごとに劇的に変化するものを調整します。フレームごとのフルGC(小さなワーキングセット)でより適切に動作するものもあります。いくつかのパスは、はるかに小さいパスでより頻繁に機能します。新しいluaバージョンといくつかのパッチ(使用することを恐れてはいけません!)でGCを改善するために多くの作業があることに注意してください。lua_State
場合によっては、スクリプトをアンロードするか、完全に破棄します。そして、まだ問題がある場合があります。小さなオブジェクトプールのサイズ(単純でオーバーヘッドを減らすために固定されています)とlua固有の大きなオブジェクトヒープのサイズを調整するのは大変です。しかし、約4MBを超えるシステムでは、特殊なヒープとプールにまだ悩まされていません。__index
and を使用__newindex
)に頼ります。コンパイル時にエラーをキャッチできればより良いです。これを軽減するためにできることはさまざまです。Luaを強くお勧めします。少しでも喜んで使用してください。Squirrelもチェックしてみてください。ユーザーベースは小さいと思います。
実際には、3つの大きな利点があります。
これらの要素により、ゲーム開発者は開発をスピードアップし、ゲームの品質を向上させる機能を有効にできます。
例えば:
私の経験から、少し煮詰めました。
長所
短所
最終的な個人的な判断:適切なサイズのゲームを構築していて、スクリプト言語をまだ持っていない場合は、Luaを入手してください。それだけの価値があるでしょう。