今天学习了action,可是练习cc.Sequence.create的时候。发现了问题。
cc.Sequence.create能够传一个action的数组进去,可是我试了非常多次,还是没成功。无奈之下,我去看了源码。
一看。原来是推断參数是否是数组的语句错了
-
cc.Sequence.create = function (tempArray) {
-
var paraArray = (typeof tempArray == "Array") ?
tempArray : arguments;
-
var prev = paraArray[0];
-
for (var i = 1; i < paraArray.length; i++) {
-
if (paraArray[i] != null) {
-
prev = cc.Sequence._actionOneTwo(prev, paraArray[i]);
-
}
-
}
-
return prev;
-
-
};
类型推断没有“Array”的,所以传数组进去的话,还是会当成传一个action进去,而不是一个action数组。
解决的方法就是替换推断參数是否是数组那一句,可是我们不能直接改cocos2d的源码。
我的解决的方法是新建一个文件,重写这种方法,然后载入cocos2d的库后,再载入我重写那个方法的文件。
下面是重写的代码:
Sequence.js
-
cc.Sequence.create = function (tempArray) {
-
var paraArray = (isArray(tempArray)) ? tempArray : arguments;
-
var prev = paraArray[0];
-
for (var i = 1; i < paraArray.length; i++) {
-
if (paraArray[i] != null) {
-
prev = cc.Sequence._actionOneTwo(prev, paraArray[i]);
-
}
-
}
-
return prev;
-
-
};
-
-
function isArray (obj) {
-
return Object.prototype.toString.call(obj) === ‘[object Array]‘;
-
}
注意载入的顺序:
-
cc.loadjs(‘lib/Cocos2d-html5-canvasmenu-min.js‘);
-
cc.loadjs(‘lib/Sequence.js‘);