先上两张从未见过的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)
不知道是我的逻辑问题,还是引擎问题。各位谁有时间帮我看一下
