【德州扑克开发记录】在lua层sdk接口类继承自cocos2d类的危害

之前给外包接微信、fb、gp、appstore等,lua调用的类是这么定义的:

local Platform_Appstore = class("Platform_Appstore",function()
  return display.newLayer()
end)

咋看一下是个很普通的用法,但却制造了2个非常难以调试的bug,给后来的工作带来了莫大的痛苦。

 

BUG1:ios真机调试,appstore支付后,乱点界面一通后,闪退,xcode报错卡在oc文件的touchbegan中。

这个bug的难点在于无法定位lua层出错的语句,只能根据oc报错确定为touch相关的报错。

原因:由于Platform_Appstore类是集成自CCObject的基类,付款的时候创建了一次,大概是由于(没有细查原因)付费完成后在某个时间点被自动回收了,造成touch混乱出错。

 

BUG2:外包接完sdk后,做了个Platform_Test类测试

     self:createButton("googleplay_pay",cc.p(display.cx, display.cy - 100), function()
local gp = Platform_GooglePlay.new()
gp:pay()
end)
-- local gp = Platform_GooglePlay.new()
-- gp:createMenu_Googleplay(self)
-- gp:addTo(self)

下面被注释的为外包原来写的测试,改为上面的代码应该是一样的,但却无法调用gp了。
原因:同样是由于Platform_GooglePlay集成自CCLayer,在创建了之后没有retain,于是在下一帧便被自动回收了。

解决:改成直接创建class。
local Platform_Appstore = class("Platform_Appstore")
 
posted @ 2016-04-11 11:39  银龙背上的骑士  阅读(182)  评论(0编辑  收藏  举报