クラスオブジェクトを登録し、そのクラスの特定のインスタンスをスクリプトに渡す適切な方法について、AngelScriptマニュアルに続く問題があります。私がAngelScriptに気づかせたいと思っているC++クラスCircle
があるとします。AngelScriptでC++クラスを登録してクラスインスタンスを渡します
class Circle
{
public:
int getArea();
int radius;
};
ここから、IはAngelScriptエンジンにgetArea()
メソッドを登録(またはそれが可能であれば自動的にクラスのメソッドのすべてのレジスタ)、及び通過、Circle
クラスのインスタンスを作成したいですクラスインスタンス自体をAngelScript環境に追加します。
Circle circleInstance;
circleInstance.radius = 10;
// Initialize AngelScript engine
asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
engine->RegisterObjectMethod("Circle", "int getArea()",
asMETHOD(Circle, getArea), asCALL_THISCALL);
AngelScriptでは、インスタンス変数からメソッドを呼び出し、C++関数の結果を返すことができます。
circleInstance.getArea();
しかし、上記のコードでは、私は明らかにどのような方法でAngelScriptエンジンにインスタンスcircleInstance
を渡しておりませんので、スクリプティング環境は、その存在のないアイデアを持っていません。私は何かを見落としていると仮定し、その答えはC++のほんの1〜2行だけであると仮定します。 Circle
クラスをRegisterObjectType
またはRegisterInterface
のようなメソッドで登録する必要があります。Circle
がこれを機能させるにはasIScriptObject
を継承する必要がありますか?どんな洞察にも感謝しています!
これは、[手動で]カバーされていない(http://www.angelcode.com/angelscript/sdk/docs/manual/doc_register_type.html)詳細? –
これは見た目ですが、「オブジェクト型の登録」のどこにも、テキストの一部を見落とさない限り、クラスのインスタンスを渡す方法はありません。'Circle'のようなクラス名をクラス型として渡す方法について説明していますが、' circleInstance'のようなクラスインスタンスを環境に気づかせる方法は不思議です。 – Vortico
しかし、今私は何かをしています。スクリプト環境で 'circleInstance'をグローバルとして登録したいのであれば、' engine-> RegisterGlobalProperty( "Circle @circleInstance"、&circleInstance); 'もしそうなら、それは私の問題の半分を解決するでしょう。 AngelScriptにクラスに関する情報を与えるには、 'RegisterObjectType'または' RegisterInterface'を使うべきですか?クラスの各メソッドを登録する必要がありますか、それとも自動的にこれを行いますか? (そうでない場合、私はこの印象をどこで得たのか分かりません) – Vortico