gooブログはじめました!

写真付きで日記や趣味を書くならgooブログ

プロパティ

2010-01-31 09:50:45 | angelscript

angelscriptのプロパティの使い方がいまいち理解できない。char型で登録したときは予想どりだが
構造体やクラスのメンバにint handle[10]を追加して下記と同様なやり方をすると「variable is not a member of MyClass」 となる。c++の構造体をGlobalPropertyと登録して、プロパティ用の関数をC++の関数として用意して、スクリプト側ではC#の プロパティと同様な使い方をする(char型の場合) 。

プロパティ(char型) C++

プロパティ(char型) スクリプト側

<form>

プロパティ(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>

コメントを投稿