void CppToLua::recvData_lua(int iCmdType, VOID * pData, WORD wDataSize)
{
CCLuaStack* luaStack = CCLuaEngine::defaultEngine()->getLuaStack();
if (!luaStack) return;
lua_State* L = luaStack->getLuaState();
if (!L) return;
//const int status = luaL_dofile(L, "src/manager/CCToLuaManager.lua");
//if(status)
//printf("Couldn't execute LUA code: %s\n", lua_tostring(L, -1));
void *p = lua_newuserdata(L, wDataSize); //不知道会不会内存泄露...
//memcpy(p, &data, sizeof(data));
memcpy(p, pData, wDataSize);
printf("p:%x, typeid:%d", p, wDataSize);
lua_getglobal(L, "recvData_cctl"); //调用lua函数
lua_pushnumber(L, iCmdType); //type
lua_pushlightuserdata(L, p); //buffer
lua_pushnumber(L, wDataSize); //size
//lua_call(L, 3, 0);
int ret = lua_pcall(L, 3, 0, 0);
if (ret)
{
printf("Error: %s\n", lua_tostring(L,-1));
}
//lua_close(L);
//getchar();
return ;
}
一直在执行到pcall这句,并没有执行完pcall时候发生标题错误。
recvData_cctl这个方法中执行的是 function UITable:moveYAction()
--开局发牌动作
function UITable:moveYAction()
self.m_bInAction = true
self.iTempCountMax = self.cardsMax - self.landownerCards
self.iTempCurCount = 1 --当前已发牌的数量
self.iTempMyCount = 1 --当前主桌玩家手牌数
local cards = {}
for i=1, self.iTempCountMax do
local cardImgBase = self:createOneHandCard(CARD_ORGPOS_DF.baseCard)
cardImgBase:setPosition(self.posDeal)
self.m_pTableUI:addNode(cardImgBase)
cards[i] = cardImgBase
end
print("运行定时器------111--------")
self:scheduleUpdateWithPriorityLua(function() self:arrangeCardSchedule(cards) end, 0.1)
print("运行定时器------222--------")
end
--发牌定时器
--cards[table]:背面牌组
function UITable:arrangeCardSchedule(cards)
-- print("进入定时器 ************")
if self.iTempCurCount > self.iTempCountMax then
self:arrangeCardScheduleFinish()
return
end
-- if self.iTempCurCount == self.iTempCountMax then
-- cardImgBase:removeFromParentAndCleanup(true)
-- end
-- local dealCard = self:createOneHandCard(CARD_ORGPOS_DF.baseCard)
-- dealCard:setPosition(self.posDeal)
-- self.m_pTableUI:addNode(dealCard)
local card = cards[self.iTempCurCount]
local ret = (self.iTempCurCount+1)%3
if ret == 0 then
--主位
self:arrangeCardAction(card, self.posDealCenter, true)
elseif ret == 1 then
--左边位置
self:arrangeCardAction(card, self.posDealLeft, false)
elseif ret == 2 then
--右边位置
self:arrangeCardAction(card, self.posDealRight, false)
end
self.iTempCurCount = self.iTempCurCount + 1
if self.iTempCurCount > self.iTempCountMax then
self:arrangeCardScheduleFinish()
end
end
--发牌动作
--pos[userdate]:发牌的目标点
--needMoveX[bool]:是否需要重排手牌显示
function UITable:arrangeCardAction(card, pos, needMoveX)
local function cardRemove()
card:removeFromParentAndCleanup(true)
end
local function receiveHandCard()
-- print("加入手牌 ========== ", cards[self.iTempMyCount])
self:receiveOneCardAction(gd.landowner.handCards[self.iTempMyCount])
self.iTempMyCount = self.iTempMyCount + 1
end
if card then
local array = CCArray:create()
array:addObject( CCMoveTo:create(self.dealCardActionTime, pos) )
array:addObject( CCCallFunc:create(cardRemove) )
if needMoveX then
array:addObject( CCCallFunc:create(receiveHandCard) )
end
local action = CCSequence:create(array)
card:runAction(action)
end
end
--17张常规发牌结束
function UITable:arrangeCardScheduleFinish()
self:unscheduleUpdate()
m_pTableNotice.startCallScore()
end