【1.5.1 物理引擎 对象池】 运动刚体节点的对象池,get方法程序崩溃

先上两张从未见过的bug
模拟器

chrome

游戏大概是这样的

当球碰到砖块,砖块就会变成另一个球,然后砖块利用对象池管理

//Curtain.js
addBrick(n) {
        for(let i = 0; i < n; i++){
            let brickNode = null;
            if(this.brickPool.size() > 0){
                brickNode = this.brickPool.get();
                cc.log('get');
            }else{
                cc.log('new');
                brickNode = cc.instantiate(this.brickPrefab);
            }
            brickNode.parent = this.node;
            brickNode.x = this.padding + (this.nextIndex % this.rows) * (brickNode.width + this.spacing) + brickNode.width / 2;
            brickNode.y = this.padding + Math.floor(this.nextIndex / this.rows) * (brickNode.height + this.spacing) + brickNode.height / 2;
            this.nextIndex++;
        }
    },

    removeBrick(brickNode){
        // brickNode.removeFromParent();
        this.brickPool.put(brickNode);
    }
//Game.js 
onBallContactBrick(ball, brick) {
        if (ball.isAttackAble) {
            let newBallNode = cc.instantiate(this.ballPrefab);
            newBallNode.position = ball.node.position;
            // newBallNode.getComponent(cc.RigidBody).linearVeiocity = cc.v2(-50, -30);
            newBallNode.parent = ball.node.parent;
            ball.isAttackAble = false;

            // brick.node.parent = null;
            this.curtain.removeBrick(brick.node);
            // setTimeout(()=>{//这样写程序正常
            //      this.curtain.addBrick(1);
            // },0);
            this.curtain.addBrick(1);//这样写程序崩溃,模拟器环境下
        }
    },

当执行到this.curtain.addBrick(1) 时程序报上面的错,但我加个一个延时操作,就没错了

送上源码包
brick-breaker.zip (1.1 MB)

不知道是我的逻辑问题,还是引擎问题。各位谁有时间帮我看一下