shake.lua表如下:
shake = {}
shake[1] = {{mode = 1,--震动的模式
t = 40,
x = 0,--持续的次数
y = -6,--等待的时间
z = 0,
},
{mode = 1,--震动的模式
t = 40,
x = 0,--持续的次数
y = 0,--等待的时间
z = 0,
}
}
shake[2] = {
{mode = 1,--震动的模式
t = 40,
x = 0,--持续的次数
y = -15,--等待的时间
z = 0,
},
{mode = 1,--震动的模式
t = 40,
x = 0,--持续的次数
y = 5,--等待的时间
z = 0,
},
{mode = 1,--震动的模式
t = 40,
x = 0,--持续的次数
y = -10,--等待的时间
z = 0,
}
}
C++怎么读取呢,代码如下:
void ShakeManager::shakeById(int Id){
//获取Lua上下文环境
lua_State* ls = LuaEngine::getInstance()->getLuaStack()->getLuaState();
lua_getglobal(ls, "shake");//将shake.lua表压入堆栈int statesCode = lua_istable(ls, -1);
if(statesCode!=1){
CCLOG("Open Lua Error: %i", statesCode);
return;
}
lua_pushinteger(ls, Id);//将Id压栈
lua_gettable(ls, -2);//获取shake中key为Id对应的表,即shake[1] = {},shake[2] = {} 并压栈
Vector<ShakeData *> shakedata;
shakedata.clear();
int size=lua_objlen(ls,-1);//获取栈顶位置表的长度,此时栈顶为shake[1]或shake[2]
for (int i = 1;i<=size;i++){
lua_pushinteger(ls, i);//将i压栈,i为shake[1] 或shake[2]中字表索引值或key值
lua_gettable(ls, -2);//将字表{mode = 1,t = 40,x = 0,y = -6,z = 0}压栈
ShakeData *info = ShakeData::create();
lua_getfield(ls, -1, "mode");//mode压栈
info->shakeID =(int)lua_tointeger(ls, -1);//获取栈顶值,即mode的值并赋值给另一变量
lua_pop(ls, 1);//mode出栈
lua_getfield(ls, -1, "t");//t压栈
info->shakeTime =(int)lua_tointeger(ls, -1);//获取栈顶值,即t的值并赋值给另一变量
lua_pop(ls, 1);//t出栈
lua_getfield(ls, -1, "x");//x压栈
info->shakeX =(int)lua_tointeger(ls, -1);//获取栈顶值,即x的值并赋值给另一变量
lua_pop(ls, 1);//x出栈
lua_getfield(ls, -1, "y");//y压栈
info->shakeY =(int)lua_tointeger(ls, -1);//获取栈顶值,即y的值并赋值给另一变量
lua_pop(ls, 1);//y出栈
lua_getfield(ls, -1, "z");//z压栈info->shakeZ =(int)lua_tointeger(ls, -1);//获取栈顶值,即z的值并赋值给另一变量
lua_pop(ls, 1);//z出栈
shakedata.pushBack(info);
lua_pop(ls, 1);//{mode = 1,t = 40,x = 0,y = -6,z = 0}出栈,进入下一循环
}
lua_pop(ls, 1);//shake[1] = {}或shake[2] = {}出栈
}
下一篇博文会给出示意图,以上只是个人理解,如有不当之处,还请指正。