angelscriptのプロパティの使い方がいまいち理解できない。char型で登録したときは予想どりだが
構造体やクラスのメンバにint handle[10]を追加して下記と同様なやり方をすると「variable is not a member of MyClass」
となる。c++の構造体をGlobalPropertyと登録して、プロパティ用の関数をC++の関数として用意して、スクリプト側ではC#の
プロパティと同様な使い方をする(char型の場合) 。
プロパティ(char型) C++
<textarea rows="8" cols="75" readonly="readonly">struct MyStruct { int health; char name[32]; }; // Struct instance MyStruct mystruct; // Getter proxy function static string Proxy_get_name(const MyStruct * ms) { int len = strnlen(ms->name, 32); string name(ms->name, len); return name; } // Setter proxy function void Proxy_set_name(MyStruct * ms, const string& new_name) { memset(ms->name, 0, 32); int len = new_name.length(); if (len > 32) len = 32; if (len > 0) memcpy(ms->name, new_name.c_str(), len); } //Angelscript registration calls (fragment): memcpy(mystruct.name, "IT WORKS!!!\x00", 12); r = engine->RegisterObjectType("MyObject", 0, asOBJ_REF | asOBJ_NOHANDLE); assert( r >= 0 ); r = engine->RegisterObjectProperty("MyObject", "int health", offsetof(MyStruct, health)); assert( r >= 0 ); r = engine->RegisterObjectMethod("MyObject", "string get_name()", asFUNCTION(Proxy_get_name), asCALL_CDECL_OBJFIRST); assert( r >= 0 ); r = engine->RegisterObjectMethod("MyObject", "void set_name(const string &in)", asFUNCTION(Proxy_set_name), asCALL_CDECL_OBJFIRST); assert( r >= 0 ); r = engine->RegisterGlobalProperty("MyObject Obj", &mystruct); assert( r >= 0 ); </textarea>
</form><form>
プロパティ(char型) C++
<textarea rows="8" cols="75" readonly="readonly">void test1() { print("Starting string: " + Obj.name); Obj.name = "SDAFSDFSDFDAS"; print("Ending string: " + Obj.name); } </textarea>
</form>
※コメント投稿者のブログIDはブログ作成者のみに通知されます