【新手向】cocos2d_js示例教程里的bug

我们在运行完cocos2d_js示例教程的代码时,会发现当我们点击消除一个sushi时,会出现下面的情况:

乍一看似乎没什么问题,但是仔细的朋友会发现GL verts有增无减,这是为什么呢?其实分辨率小一点,我们发现sushi全部堆积在窗体的底部了。而且会有一条报错:
JS: onEnter
JS: removeSushi…
jsb: ERROR: File …\auto\jsb_cocos2dx_auto.cpp: Line: 4260, Function: js_cocos2dx_Node_getPositionY
js_cocos2dx_Node_getPositionY : Invalid Native Object
JS: D:/Cocos/CocosJSGame111/runtime/win32/…/…/src/PlayScene.js:142:Error: js_cocos2dx_Node_getPositionY : Invalid Native Object

这个错误自己一开始也想不通,这是为什么呢?于是看看网上别人的说法,有人说是要在初始化方法里初始化sprite数组,但是自己在尝试了之后并无效果,网上其他的说法也比较笼统。
于是自己便思考错误的来源,发现程序运行之后若什么都不干是不会报错的,错误的出现是在Touch事件之后。于是这时我们便想,一定是Touch事件处理出错了或者有什么地方没有处理到。
接下来,看看那条报错D:/Cocos/CocosJSGame111/runtime/win32/…/…/src/PlayScene.js:142:Error: js_cocos2dx_Node_getPositionY : Invalid Native Object

显示的是这块地方出错了。再仔细考虑之后,发现了执行Touch事件时,我们执行的是target.removeFromParent();貌似这里没什么问题,但联系前边的程序
我们在addsushi时执行了this.SushiSprites.push(sushi);也就是说,在执行完Touch事件后,SushiSprites数组里的sushi被remove了,但是对应的SushiSprites数组里的项却没有删除 于是当遍历数组访问到那一项的时候,其坐标属性当然是不可访问的。这大概就是错误的来源吧。当我们把touch事件里的removefromparent语句注释掉时,就会发现错误没有了。
那么这里自己做了点小小的改动,给sushisprite对象添加了一个flag属性 接下来,我们在addsushi时将其初始化
在touch事件里改变touch对象的属性
最后(这里自己小小的偷了下懒,嘻嘻),在removesushi里增加一个条件,达到在移除sushi对象的同时删除其在sushisprites数组里的对应项
这里当然会有瑕疵,有精力的朋友可以去试试更好的处理方法。这里是笔者的处理结果,可以看到已经没有那个bug了:
第一次在cocos论坛发帖,希望能帮助到初学cocos2d_js的朋友,也希望前辈们能多多指点。谢谢!

自己顶一下:7: