Cocos 2D - 使用CCCallFunc解析序列列表

时间:2014-08-05 21:07:53

标签: lua cocos2d-x

我希望在不同的节点上执行一系列操作。为此,我希望将每个动作作为该动作的单个序列处理,并且CCCallFunc指向控制动作序列的函数。

目前我正在尝试让代码只在一个节点上运行,但不幸的是我一直收到一个我无法弄清楚的错误。

下面是构建序列数组的代码。每次调用moveEast()时,都会向actionArray添加一个新序列。

actionArray = {}

function moveEast()
    local posAction = CCMoveBy:create(0.2, cc.p(-47, 0))

    local callback = CCCallFunc:create(handleActions)
    actionArray[table.getn(actionArray) + 1] = {posAction, callback}
end

直接调用CCCallFunc中引用的函数,以启动解析序列列表的过程。

actionCounter = 0

handleActions = function ()
    if actionCounter < table.getn(actionArray) then
        actionCounter = actionCounter + 1

        local actionSeq = actionArray[actionCounter]

        layerMaze:runAction(actionSeq)
    end
end

... lots of code ...

handleActions()

序列中的CCCallFunc工作正常,并调用handleActions(),但是当actionArray中有多个序列时,我收到以下错误:

cocos2d: [LUA-print] ----------------------------------------
cocos2d: [LUA-print] LUA ERROR: ASSERT FAILED ON LUA EXECUTE: Argument must be non-nil

cocos2d: [LUA-print] stack traceback:
    [string "src/main.lua"]:13: in function <[string "src/main.lua"]:10>
    [C]: in function 'runAction'
    [string "GameScene.lua"]:312: in function <[string "GameScene.lua"]:304>
cocos2d: [LUA-print] ----------------------------------------

在调试器中运行时,我可以看到通过CCCallFunc调用handleActions()时所有变量都可用。

那里的任何人都知道出了什么问题?

更新1

我在调试器测试的交互式控制台中通过调用actionSeq变量上的函数setTag()来保存序列,该函数位于handleActions()函数中。

actionArray中的第一个序列可以轻松设置标记,但第二个序列返回以下错误:

=>actionSeq:setTag(2)
Execution error 206: [string "debugger"]:0: invalid 'cobj' in function 'lua_cocos2dx_Action_setTag'

我可以从该错误消息中收集到的最好的信息是,它与垃圾收集器或跨线程的变量范围有关。我尝试使用collectgarbage('stop')禁用垃圾收集器,但它没有任何影响。

0 个答案:

没有答案