想要一个node runaction后, 另一个node开始run另一个action该如何做,
将后一个动作用回调的方式触发, 总是报错误
比如
self.node.runAction(cc.sequence(
cc.moveTo(duration, cc.p(dist.x, self.node.y)),
postProcessor));
postProcessor是另一个node的runAction的callFunc封装
报什么错?能把你的代码贴上来看一下吗?
Simulator : jsb ERROR: File /Users/nantas/fireball-x/cocos2d-x-prebuilt/cocos/scripting/js-bindings/auto/jsb_cocos2dx_auto.cpp: Line: 16261, Function: js_cocos2dx_MoveBy_create
Simulator : js_cocos2dx_MoveBy_create : Error processing arguments
Simulator : /Applications/CocosCreator.app/Contents/Resources/cocos2d-x/simulator/mac/Simulator.app/Contents/Resources/script/jsb_cocos2d.js:2482:Error: js_cocos2dx_MoveBy_create : Error processing arguments
Simulator : ScriptingCore::callFunctionName error:__errorHandler wasn’t found!
你的源码贴上来看看
简化后的代码:
调用处
this.entity.moveTo(cc.p(this.entity.anchorX, 0),
cc.callFunc(this.map.moveLeft, this.map, distance));
moveTo, 及 moveLeft
moveLeft: function (distance) {
var self = this;
var duration = distance / (Global.SPEED * self.speedFactor);
self.node.runAction(cc.moveTo(duration, cc.p(self.node.x - distance, self.node.y)));
},
moveTo: function (dist, postProcessor) {
var self = this;
var distance = Math.abs(dist.x - self.node.x);
var duration = distance / (Global.SPEED * self.speedFactor);
self.node.runAction(cc.sequence(
cc.moveTo(duration, cc.p(dist.x, self.node.y)),
postProcessor));
}
moveTo及moveLeft所持有的node不是同一个
有moveBy, 这里没有vec2类型, distance是转换后的一个数值。
刚仔细跟踪了下, 在调用cc.callFunc(this.map.moveLeft, this.map, distance));
这个distance传递的是一个数值, 但是在真正执行的时候这个distance变成了cc_Node类型
不知道为什么
额,刚刚看错了,如果有空的话可以做一个能够重现的简单工程传上来我帮你看看,当然我也不一定能找出来是哪里错了
呃, 好的。
基本上可以认为是callFunc的data参数绑定有问题
文件CCActionInstant.js中CallFunc中的execute方法中的this.target是做什么的, 应该是误传的吧?
execute:function () {
if (this._function) {
this._function.call(this._selectorTarget, this.target, this._data);
}
},
如果是这个问题的话, 我该如何操作, 以便本地引擎可以生效?
不好意思啊,下午有事,现在还在外面,只有明天帮你看看
费了半个小时,终于找到问题了
cc.callFunc调用的函数,默认有一个node类型的参数
自定义传递的参数是第二个
所以你cc.callFunc调用的函数的参数列表应该有两个参数才正确
第一个就是node,经过我的测试,node就是执行cc.callFunc动作的node
第二个才是你要传递的参数,所以,应该像这样

这样就能正确执行了
还有,为啥一个简单的动作效果非要弄四个脚本组件继承来继承去的
自从我用creator后,就再也没碰过继承这个东西了(我才不会说是我不熟悉prototype,不会用继承,搞不清楚,觉得麻烦,思路不清楚),你的所有操作一个脚本组件就应该够了的
顺便 @nantas @panda @jare 关于这个cc.callFunc,希望有空的时候弄个文档,或者在API文档的示例里说明一下,谢谢各位大神
这里的第二个参数this.target应该就是回调函数里的第一个参,data应该就是回调函数的第二个参数,因为我没弄明白call,也不熟悉creator底层,所以浪费很多时间来测试
多谢atmy, 这个例子只是一个示意,实际程序比较复杂, 所以这里有个继承。
但是这个cc.callFunc感觉还是有点奇怪, 因为实际上并不需要node这个参数,放在这里挺多余。 不过还是多谢atmy
不客气,应该是考虑到可能开发者要获取到动作执行者,所以才加入target参数的,就像触摸回调或者其他回调一样,因为有时候要知道是谁在执行,所以会传个target,只是希望官方在API文档里说明一下
是的, api的文档中只给了两个例子, 一个是不带参数的, 一个是带参数boolean的。 我也是在调试时发现多了个target, 还以为是误传的。