properties里建立的数组是不是不能保存数据?

写了一段测试代码如下。
//plays.js测试代码
`var ziYuan = require(“ziYuan”);

cc.Class({
extends: cc.Component,

properties: {
    //boss资源
    boss:[],
    //role资源
    role:null,
    //boss数量
    shuLiang:30,
},

// use this for initialization
onLoad: function () {
    log(1);
    cc.game.addPersistRootNode(this.node);
    log(1.1);
    //初始化角色
    this.role = ziYuan.role;
    this.role.zuoBiao = cc.v2(0,-2400);
    log(1.2);
    //初始化怪物
    for (var xx = 0; xx < 30; xx += 1){
        log(2);
        this.boss[xx] = ziYuan.guai;
        log(2.1);
        var tt = this.boss[xx];
        log(2.2);
        tt.zuoBiao = this.getNewGuaiPosition();
        log(2.3 + ' ' + tt.zuoBiao);
        tt.juLi = Math.ceil(cc.pDistance(tt.zuoBiao, this.role.zuoBiao));
        log(2.4 + ' ' + tt.juLi);
        this.boss[xx] = tt;
        log(2.5);
    }

    //this.boss[i].juLi = cc.pDistance(this.boss[i].zuoBiao, this.role.zuobiao);
    
    
    //测试初始化
    for (var a = 0; a < 30; a ++){
        log(1.3);
        log(a + ' ' + this.boss[a].juLi);
    }
    log(1.4);

},

getNewGuaiPosition: function () {
    //怪坐标随机
    var randX = cc.random0To1() * 1400 - 700;

    var randY = cc.random0To1() * 4800 - 2400;

    return cc.v2(Math.ceil(randX), Math.ceil(randY));
    
},

// called every frame, uncomment this function to activate update callback
update: function (dt) {

},

});

//ziYuan.js
module.exports = {
//怪物部分数据(坐标,距离)
guai:{
zuoBiao:null,
juLi:0,
},
//角色部分数据(坐标,锁定判定,锁定怪物索引号)
role:{
zuoBiao:null,
suoDing:false,
suoYing:0,
}
};
`
我写了这样一段代码
我发现properties里的boss[] 在“初始化怪物”的时候建立数组
但是在“测试初始化”的时候调出的全部都是最后一次循环的值
最后一次循环的内容覆盖了之前所有的内容
并且,在使用this.shuLiang作为for循环的条件时无法执行

这是一个常驻节点

求大神帮忙解惑~

这个问题已经困扰我好久了,项目中全是这个BUG,无限奔溃中。

log2.4和2.5之间,你把this.boss[xx] = tt.zuoBiao了,它变成了一个cc.v2,下面测试的时候当然没有.juLi这个属性,因为juLi属性是tt的,不是tt.zuoBiao的。

1赞

依然不行,结果this.boss保存的全部都是最后一个tt的值
log1.3 后面的那个log返回的全是最后一个tt,
this.boss的30个内容全部一样。。。

重写了部分内容,还是不行,最后一个初始化循环的内容覆盖了之前所有的内容


//plays.js onLoad
onLoad: function () {
log(1);
cc.game.addPersistRootNode(this.node);
log(1.1);
//初始化角色
this.role = ziYuan.role;
this.role.zuoBiao = cc.v2(0,-2400);
log(1.2);
//初始化怪物
for (var xx = 0; xx < 30; xx += 1){
log(2);
this.boss.push(ziYuan.guai);
log(2.1);
//var tt = this.boss[xx];
log(2.2);
this.boss[xx].zuoBiao = this.getNewGuaiPosition();
log(2.3 + ’ ’ + this.boss[xx].zuoBiao);
this.boss[xx].juLi = Math.ceil(cc.pDistance(this.boss[xx].zuoBiao, this.role.zuoBiao));
log(2.4 + ’ ’ + this.boss[xx].juLi);
//this.boss[xx] = tt;
log(2.5);
}

    //this.boss[i].juLi = cc.pDistance(this.boss[i].zuoBiao, this.role.zuobiao);
    
    
    
    for (var a = 0; a < 30; a ++){
        log(1.3);
        log(a + ' ' + this.boss[a].zuoBiao);
    }
    log(1.4);

},

已经解决拉~~~Cocos官方15群的@壮志凌云 大哥指出了问题,没有进行内存分配,最后boss数组的所有指针都指向了同一段内存,自然30个目标都被刷新了,这里要建立一个新的结构用var分配内存,问题顺利解决

重点是需要有这个
log(2);
var guai = {
zuoBiao:ziYuan.guai.zuoBiao,
juLi:ziYuan.guai.juLi,
};