私は本当にLuaスクリプトをゲームエンジンに追加したいと思っています。私はLuaを使用していて、luabindを使用してC ++にバインドしていますが、Luaを使用してゲームエンティティを構築する方法を設計するための支援が必要です。
エンジン情報:
コンポーネント指向、基本的にそれぞれはデルタT間隔で更新されるGameEntity
リストです。components
基本的Game Scenes
に、ゲームエンティティのコレクションで構成されています。
だから、ここにジレンマがあります:
GameEntityとそのコンポーネントを定義するためのこのLuaファイルがあるとしましょう。
GameEntity =
{
-- Entity Name
"ZombieFighter",
-- All the components that make the entity.
Components =
{
-- Component to define the health of the entity
health =
{
"compHealth", -- Component In-Engine Name
100, -- total health
0.1, -- regeneration rate
},
-- Component to define the Animations of the entity
compAnimation =
{
"compAnimatedSprite",
spritesheet =
{
"spritesheet.gif", -- Spritesheet file name.
80, -- Spritesheet frame width.
80, -- Spritesheet frame height.
},
animations =
{
-- Animation name, Animation spritesheet coords, Animation frame duration.
{"stand", {0,0,1,0,2,0,3,0}, 0.10},
{"walk", {4,0,5,0,6,0,7,0}, 0.10},
{"attack",{8,0,9,0,10,0}, 0.08},
},
},
},
}
ご覧のとおり、このGameEntityは、「compHealth
」と「」の2つのコンポーネントで定義されていcompAnimatedSprite
ます。これらの2つのまったく異なるコンポーネントには、まったく異なる初期化パラメーターが必要です。整数と浮動小数点数(合計と再生)を必要とするヘルス、および反対側では、スプライトシート名を必要とするアニメーション、およびすべてのアニメーション(フレーム、期間など)を定義するためのヘルス。
Luaからの初期化を容易にするためにLuaバインディングを必要とするすべてのコンポーネントで使用できる仮想初期化メソッドを使用して、ある種の抽象クラスを作成したいのですが、仮想クラスには1つがないため、難しいようです。仮想初期化メソッド。これは、すべてのコンポーネント初期化子(またはそれらのほとんど)が異なる初期化パラメーターを必要とするためです(ヘルスコンポーネントは、アニメーションスプライトコンポーネントまたはAIコンポーネントとは異なる初期化を必要とします)。
このコンポーネントのコンストラクターへのLuaバインディングを簡単にするために何を提案しますか?またはどのようにそれをしますか?
PS:このプロジェクトにはC++を使用する必要があります。