2011-01-26 5 views
3

currectゲームプロジェクトにスクリプト可能なNPCを入れる必要があります。 プロジェクト自体はC++言語で開発されています。 ルアビンンドを使ってluaとC++をバインドします。ゲームNPCマルチアクションluaスクリプトデザイン

何かするためにNPCがクリックまたはタイマーを起動したときにNPC機能を呼び出す必要があります。 現在のところ、2つのNPCスクリプトデザインの間に行き着いています。

  1. すべてのNPCを区別するために、種類のnpcname_actionを使用します。
    これは、すべての異なるNPCに名前を付けるのは面倒です。
    私はまだ私のプロジェクトでこれを実装する方法を考えています。
    例:関数の名前を使用して

    HotelBellboy12_Click() { .. } 
    HotelBellboy12_TimerAction() { .. } 
    

  2. すべてのnpcには、それ自身のluaファイルがあります。 1がより良いとする理由である

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


私はスクリプトをメモリにロードするために考えて、必要なときだがluaL_loadbuffer
例を使用してluaStateにロードされますか?

+2

これはhttp://gamedev.stackexchange.com/に移動する必要があります。 – Ither

答えて

1

私は前にこのような何かをやったと私はあなたの#2のオプションに似たものを使用しました。マップがロードされると、すべてのNPCデータを含むコンフィギュレーションLuaファイルが読み込まれます。 NPCに使用されるスクリプトファイルの名前です。

ゲームでNPCをロードする必要があるときに、私はLuaファイルをコンパイルします。 NPCは、「モデル」NPCタイプを使用して、NPC設定で指定されている共通の動作(たとえば、MerchantタイプまたはCommonerタイプ)のほとんどを指示できます。これらのモデルタイプは、クリックすると取引ウィンドウを提供するなどの基本機能をすべて提供します。特定のNPCの使用機能はOnClick()のように、モデルをオーバーライドしてカスタムハンドラを提供します。

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

3

別のデザインを使用することもできます。

表のキーと値には任意のタイプを使用できます。

たとえば、npcがすべてのNPCを含むテーブルであるとします。そのキーはNP​​Cの名前であり、その値は別のテーブルです。この他のテーブルキーはアクションであり、その値はこのアクションの機能です。あなたはタイマーの後に泣いて、クリックされたときにジャンプするボブとアリスをしたい場合 だから、単純に実行します。

npc.bob.click = function() jump() end 
npc.alice.timer = function() cry() end 
+0

これには依然として固有の名前が必要です。 –