发信人: fwait(water), 信区: Script
标 题: lua的问题在这里问一下!
发信站: 饮水思源 (2013年12月31日04:01:50 星期二)

非常感谢水源的学生
不过我做的比较简单。
我写了一个例子

struct Circle
{
Circle(int _x, int _y, int _radio):x(_x),y(_y),radio(_radio) {}
int x;
int y;
int radio;
};

class CMyCircle
{
public:
CMyCircle(int x,int y,int radio):_x(x),_y(y),_radio(radio)
{

}

~CMyCircle(){}

const char * is_Lua() {return "My Lua Test!\n";}
Circle Get() {return Circle(_x,_y,_radio);}
void Set(Circle circle)
{
_x = circle.x;
_y = circle.y;
_radio = circle.radio;
}

void SetX(int x) { _x = x; }
void SetY(int y) { _y = y; }
void SetRadio(int radio) {_radio = radio;}

int GetX() {printf("GetX = %d\n", _x);return _x;}
int GetY() {printf("GetY = %d\n", _y);return _y;}
int GetRadio() {printf("GetRadio = %d\n", _radio);return _radio;}

public:
int _x;
int _y;
int _radio;
};


定义了两个
CMyCircle G_MyCircle(10,10,20);
Circle G_Circle(200,200,200);

int main()
{
lua_State* L = lua_open();
luaopen_base(L);
luaopen_string(L);
//lua_tinker::class_add<base>(L, "base");
//lua_tinker::class_def<base>(L, "is_base", &base::is_base);
lua_tinker::class_add<CMyCircle>(L, "CMyCircle");
// lua_tinker::class_inh<CMyCircle, base>(L);
lua_tinker::class_con<CMyCircle>(L, lua_tinker::constructor<CMyCircle,int,int
,int>);
lua_tinker::class_def<CMyCircle>(L, "Get", &CMyCircle::Get);
lua_tinker::class_def<CMyCircle>(L, "Set", &CMyCircle::Set);
lua_tinker::class_def<CMyCircle>(L, "GetX", &CMyCircle::GetX);
lua_tinker::class_def<CMyCircle>(L, "SetX", &CMyCircle::SetX);
lua_tinker::class_def<CMyCircle>(L, "GetY", &CMyCircle::GetY);
lua_tinker::class_def<CMyCircle>(L, "SetY", &CMyCircle::SetY);
lua_tinker::class_def<CMyCircle>(L, "GetRadio", &CHMICircle::GetRadio);
lua_tinker::class_def<CMyCircle>(L, "SetRadio", &CHMICircle::SetRadio);
lua_tinker::class_mem<CHMICircle>(L, "X", &CHMICircle::_x);
lua_tinker::class_mem<CHMICircle>(L, "Y", &CHMICircle::_y);
lua_tinker::class_mem<CHMICircle>(L, "Radio", &CHMICircle::_radio);

lua_tinker::class_add<Circle>(L,"MyCircle");
lua_tinker::class_con<Circle>(L, lua_tinker::constructor<Circle,int,int ,int>
);
lua_tinker::class_mem<CMyCircle>(L, "X", &Circle::x);
lua_tinker::class_mem<CMyCircle>(L, "Y", &Circle::y);
lua_tinker::class_mem<CMyCircle>(L, "Radio", &Circle::radio);
//lua_tinker::class_mem<CMyCircle>(L, "X", &CMyCircle::_x);
//lua_tinker::class_mem<CMyCircle>(L, "Y", &CMyCircle::_y);
//lua_tinker::class_mem<CMyCircle>(L, "Radio", &CMyCircle::_radio);
lua_tinker::set(L, "G_MyCircle", &G_MyCircle);
lua_tinker::set(L, "G_Circle", &G_Circle);
lua_tinker::dofile(L, "D:\\Alignment\\NewProjects\\LuaDrawFunction\\Debug\\HL
DScript.lua");
lua_close(L);
}
G_MyCircle.X = 100 可以赋值 ?
G_Circle.X = 100 为什么不能赋值 ?

这条语句 Circle Get() {return Circle(_x,_y,_radio);}

在脚本中调用 a = G_MyCircle:Get();
a 实际上是Circle 结构,能不能 a.X = 100 ? 当然目前不能
我可以得到这样一个对象?
也就是说一个类CMyCircle 有很多类对象比如目前的Circle. 以后还有Rectangle ,Line
我想调用这些对象,而且还能对这些类对象的成员变量进行赋值




--

※ 来源:·饮水思源 bbs.sjtu.edu.cn·[FROM: 12.156.66.26]