cocos2d-html5学习笔记(六)--alpha2中cc.Sequence.create中的bug

 

cocos2d-html5学习笔记(六)--alpha2中cc.Sequence.create中的bug

http://blog.csdn.net/allenice1/article/details/7747425

分类: javascript cocos2d-html5 3005人阅读 评论(0) 收藏 举报

今天学习了action,可是练习cc.Sequence.create的时候。发现了问题。

cc.Sequence.create能够传一个action的数组进去,可是我试了非常多次,还是没成功。无奈之下,我去看了源码。

一看。原来是推断參数是否是数组的语句错了

[javascript] view plaincopy
  1. cc.Sequence.create = function (/*Multiple Arguments*/tempArray) {  
  2.     var paraArray = (typeof tempArray == "Array") ?

     tempArray : arguments;  

  3.     var prev = paraArray[0];  
  4.     for (var i = 1; i < paraArray.length; i++) {  
  5.         if (paraArray[i] != null) {  
  6.             prev = cc.Sequence._actionOneTwo(prev, paraArray[i]);  
  7.         }  
  8.     }  
  9.     return prev;  
  10.   
  11. };  

类型推断没有“Array”的,所以传数组进去的话,还是会当成传一个action进去,而不是一个action数组。

解决的方法就是替换推断參数是否是数组那一句,可是我们不能直接改cocos2d的源码。

我的解决的方法是新建一个文件,重写这种方法,然后载入cocos2d的库后,再载入我重写那个方法的文件。

下面是重写的代码:

Sequence.js

[javascript] view plaincopy
  1. cc.Sequence.create = function (/*Multiple Arguments*/tempArray) {  
  2.     var paraArray = (isArray(tempArray)) ? tempArray : arguments;  
  3.     var prev = paraArray[0];  
  4.     for (var i = 1; i < paraArray.length; i++) {  
  5.         if (paraArray[i] != null) {  
  6.             prev = cc.Sequence._actionOneTwo(prev, paraArray[i]);  
  7.         }  
  8.     }  
  9.     return prev;  
  10.   
  11. };  
  12.   
  13. function isArray (obj) {  
  14.      return Object.prototype.toString.call(obj) === '[object Array]';   
  15. }  

注意载入的顺序:

[javascript] view plaincopy
  1. cc.loadjs('lib/Cocos2d-html5-canvasmenu-min.js');  
  2. cc.loadjs('lib/Sequence.js');  
原文地址:https://www.cnblogs.com/yutingliuyl/p/6722398.html