最近在学习quick-x,今天遇到一个问题,所以过来请教一下大家,问题如下:
我的游戏场景每两秒需要发射一枚导弹,那么我有如下方法:
【发射导弹的方法】
function gameScene:fire()
--- 这里的代码会操作layer,从里面通过Tag取出Sprite。
--- 还会编写actions,并且runAction
--- 总体来讲基本上都是对精灵的操作
end
```
【发射导弹的调度器】 每3秒调用一次fire()以实现功能
function gameScene:fireControl(base)
self.curScheulerHandle =scheduler.scheduleGlobal(function()
gameScene:fire()
end,base)
end
```
关键代码就上以上部分,问题就出现在这里,运行后得到如下错误提示:
:109: attempt to index field 'layer' (a nil value)
反正有关于UI部件的(sprie,layer等),都会提示其值为nil。
【我的解决方法】
function gameScene:fireControl(base)
self.curScheulerHandle =scheduler.scheduleGlobal(function()
【fire方法里面的内容】
end,base)
end
```
也就是我在调度器回调里面不再调用fire方法,而是直接将fire方法里面的内容移到调度器回调里面后程序就正常了,不报错且逻辑正确。
【我的思考和问题】
遇到这样的问题,我首先想到的是是不是线程的原因导致的, 引用coco2d-x的ui只能再主线程上操作。 但是我想过了,使用调用器时的确是使用了子线程,但是当它回调回来的时候应该已经回到主线程了的啊,这里不明白?
为什么在回调里面调用fire方法后功能就会失效?
为什么把方法体内容移到回调里面就正常了?
以上就是我的问题了, 可能我初学lua所以不知道其中的一些特性并且还残留其他语言的思想所以才导致写出错误的代码, 如有人能回答我的问题,请给予讲解,谢谢。
在这里先谢谢各位。