[已解决]SOS! cocos2d-js 3.0场景转换问题

第一次进入场景A正常,但场景A中通过cc.director.runScene转到场景B,然后场景B中点击按钮同样用cc.director.runScene转到场景A就出问题了,不停如下报错:

jsb: ERROR: File C:\Users\zhangchuanwei\Documents\cocos\PrebuiltRuntimeJs\frameworks\js-bindings\bindings\auto\jsb_cocos2dx_auto.cpp: Line: 4772, Function: js_cocos2dx_Node_getPositionYjs_cocos2dx_Node_getPositionY : Invalid Native ObjectJS: D:/study/cocos/FirstCocos2DGame/runtime/win32/../../src/sprite_stone.js:51:Error: js_cocos2dx_Node_getPositionY : Invalid Native Object

看提示,就是说sprite_stone.js文件的第51行出错了。第51行代码如下:
if(this.y<=(0-this.height/2)) {
sprite_stone.js是场景A的一个精灵,看不出任何名堂,找了各种资料,各种办法都试过了,把我卡在这里了,实在没办法……救命。

现在是凌晨两点,以上描述的问题终于得到解决。是个不容易跳出来的坑,简直是段不堪回首的经历,从今天下午,到现在,耗费了这么多的时间……本计划今晚就完成这个游戏的,又得推到明天了。不说了,写完赶紧睡觉。详细的解决办法看2楼。

我整理了下,下面分享给大家,是这样的:
如果你定义一个继承自Layer的类MyLayer,类有个数组成员变量myArray,该数组存储几个Sprite对象(比如炮弹)。在往myArray里面塞Sprite对象的时候,如果你用数组的push方法,第一次创建MyLayer类的对象a没问题,当你第二次再创建MyLayer类的对象b时,你会发现b对象的myArray的长度很奇怪:它的初始长度是a对象的myArray长度!简直不可相信!你进一步会发现,虽然b对象的myArray里面装有东西,但是里面的东西只知道是object类型,已经不是之前塞进去的Sprite对象。
解决办法可以用下标方式往数组塞对象,例如:a* = new MySprite()。
虽然问题最终解决了,但我不知道为什么会出现这样的现象,或许这是个BUG。又或许是自己使用的问题,javascript我并不精通,不知道这两种数组操作方式在这里有什么区别,有精通javascript的小伙伴知道吗?请你记得告诉我。
*

哥们你真是很拼,加油!

你创建MyLayer对象的时候,在初始化方法里面数组也初始化一下;
比如a=];

— Begin quote from ____

引用第4楼chj2014于2014-09-25 10:06发表的 回 2楼(jebysun) 的帖子 :
你创建MyLayer对象的时候,在初始化方法里面数组也初始化一下;
比如a=]; http://www.cocoachina.com/bbs/job.php?action=topost&tid=232277&pid=1063859

— End quote

试了下,还真可以这样,不过,我在声明的时候已经给它赋值a:],为什么没作用。

我觉得是
ctor: function () {
//父类方法
this._super();

这个super方法里面做了什么把声明的值给修改了,你应该问问版主

给力。。 声明的时候赋值有时候不太管用,最好再初始化一次,我也碰到过类似的问题。

继承的时候,cc.Class.extend({
arr: ]
});

这里的arr是存在于继承链prototype上的,而不是对象上。如果直接push到这个对象上,其实就是push到这个对象的继承链上的arr数组里面了,那么每个从这里继承出来的对象,读取的时候,都会取到这里的数据。

ctor里面声明的目的是给自身声明一个arr数组,这样this.arr取到数据,就不会向上寻找继承链上的数据了。push也不会再污染嘞:2:

nice:2::2::2::2:

Mark:867::867::867: