update事件中,不能访问某些self数据?

代码如下:
—构造函数
function ALayer:ctor()

self.sprite = display.newSprite(“a.jpg”)
self.action = CCMoveBy:create(10, ccp(0, 200))

–然后注册每帧update事件:
self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT, function(dt) self:onEnterFrame(dt) end)
self:scheduleUpdate()

}

–update函数
function ALayer:onEnterFrame(dt)

self.sprite:runAction(CCMoveBy:create(10, ccp(0, 200))) --可以移动

self.sprite:runAction(self.action) --出错, 参数错误
end

感觉在update的每帧调用中,能访问到self里面的sprite成员,但访问self.action成员出错。请问是什么原因?

请 把错误提示 贴上来

错误日志:

LUA ERROR: ASSERT FAILED ON LUA EXECUTE: Argument must be non-nil

stack traceback:
: in function ‘runAction’
:396: in function ‘onEnterFrame’
:316: in function <:316>


LUA ERROR: ASSERT FAILED ON LUA EXECUTE: Argument must be non-nil

type(self.action) 看看是不是 nil

代码:printf(“type: %s”, type(self.action))
输出:type: userdata

把self.action retain一下?

lua里面需要retain?我试试

retain后还是那个错误,

应该是在ctor里创建的C++对象没有使用,被自动释放掉了

是5楼和8楼说的原因。self.action需要retain一下,然后在update里面不能多次调用那句runAction,需要加一个flag,让这句话只调一次,程序就没问题了。谢谢大家的帮助。

如果只调用一次的化,在构造函数里面写上这个逻辑反而会更好
local scheduler = require(“framework.scheduler”)
scheduler.performWithDelayGlobal(function()
self.sprite:runAction(CCMoveBy:create(10, ccp(0, 200)))
end, 0.1)

是只调用一次,但要定时调用。每一个update里面都需要用剩余时间减掉这一帧的时间。

self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT, handler(self, self.Update) )
self:scheduleUpdate()