3

現在のゲーム プロジェクトにスクリプト可能な NPC を配置する必要があります。プロジェクト自体は C++ 言語で開発されています。Lua と C++ をバインドするために Luabind を使用します。

特定の NPC がクリックされたとき、または何かを行うためのタイマーがアクティブになったときに、NPC 関数を呼び出す必要があります。現在、私は 2 つの NPC スクリプト デザインの間で行き詰まっています。

  1. npcname_action の一種を使用して、すべての NPC を区別します。
    NPCごとに名前をつけるのはちょっと面倒。
    私はまだこれを私のプロジェクトに実装する方法を考えています。
    例:

    HotelBellboy12_Click() { .. }  
    HotelBellboy12_TimerAction() { .. }
    
  2. 関数の名前を使用します。
    すべての npc には独自の lua ファイルがあります。
    スクリプトをメモリにロードすることを考えており、必要に応じて 例をluaState使用してロードされます:luaL_loadbuffer

    OnClick() { .. }
    OnTimerAction() { .. }
    

どちらが優れているのか、その理由は?

4

2 に答える 2

3

別のデザインを使用できます。

テーブルのキーと値は任意の型にできるという事実を利用してください。

npc がすべての NPC を含むテーブルであるとしましょう。そのキーは NPC の名前で、その値は別のテーブルです。この他のテーブル キーはアクションであり、その値はこのアクションの機能です。したがって、クリックするとボブがジャンプし、タイマーの後にアリスが泣くようにしたい場合は、次のようにします。

npc.bob.click = function () jump() end
npc.alice.timer = function () cry() end
于 2011-01-27T16:21:41.720 に答える
1

私は以前にこのようなことをしたことがあり、#2のオプションに似たものを使用しました。マップが読み込まれると、すべての NPC データを含む構成 Lua ファイルが読み込まれます。その中には、NPC に使用されるスクリプト ファイルの名前があります。

ゲームで NPC をロードする必要がある場合は、Lua ファイルをコンパイルします。NPC は、「モデル」NPC タイプを使用して、NPC 構成で指定されているほとんどの一般的な動作 (商人タイプまたは平民タイプなど) を指定できます。これらのモデル タイプは、クリックしたときに取引ウィンドウを提供するなど、すべての基本機能を提供します。特定の NPC は、OnClick() などの関数を使用してモデルをオーバーライドし、カスタム ハンドラーを提供します。

これは私にとってはかなりうまくいきましたが、ゲームが大きくなると大量のスクリプトになってしまいます。

于 2011-01-27T16:39:30.380 に答える