主逻辑
let move = (x, y, callback)=> {
if(x == 0 || this.data[x][y] == 0) {
callback && callback();
return;
}else if(this.data[x-1][y] == 0){
// move
let block = this.blocks[x][y];
let position = this.positions[x-1][y];
this.blocks[x-1][y] = block;
this.data[x-1][y] = this.data[x][y];
this.blocks[x][y] = null;
this.data[x][y] = 0;
this.doMove(block, position, ()=>{
move(x-1, y, callback)
})
hasMoved = true
}else if(this.data[x-1][y] == this.data[x][y]){
// merge
if(this.move[x-1][y] == 1){
this.move[x-1][y] = 0;
callback && callback();
return;
}
this.move[x-1][y] = 1;
let block = this.blocks[x][y];
let position = this.positions[x-1][y];
this.blocks[x][y] = null;
this.data[x-1][y] *= 2;
this.data[x][y] = 0;
console.log(‘d’,x,y,this.blocks[x][y],this.blocks[x-1][y],this.blocks)
this.doMove(block, position, ()=>{
console.log(‘d’,x,y,this.blocks[x][y],this.blocks[x-1][y],this.blocks)
this.doMerge(block, this.blocks[x-1][y], this.data[x-1][y], ()=>{
callback && callback();
});
})
// if(this.blocks[x-1][y]._name == ‘block’){
// }else{
// for(var i=0;i<POINT_NUM.length;++i){
// if(this.data[x-1][y] == POINT_NUM[i]*2){
// let point = 0;
// if(POINT_NUM[i].length == 3){
// point = POINT_NUM[i].charAt(POINT_NUM[i].length-1)
// }else{
// point = POINT_NUM[i].substr(-2)
// }
// this.updatePointsScore(parseInt(this.points)+parseInt(point));
// }
// }
// var blocks = this.blocks[x-1][y];
// let scale1 = cc.scaleTo(0.1, 1.1);
// let scale2 = cc.scaleTo(0.1, 1.0);
// let mid = cc.callFunc(()=>{
// this.myPicPool.put(blocks);
// })
// let finished = cc.callFunc(()=>{
// callback && callback()
// });
// blocks.runAction(cc.sequence(scale1,mid, scale2,finished));
// this.blocks[x-1][y] = null;
// this.data[x-1][y] = 0;
// this.myPicPool.put(block);
// callback && callback();
// return;
// }
hasMoved = true
}else {
callback&&callback();
return;
}
}
//移动
doMove(block,position,callback){
let action = cc.moveTo(MOVE_DURATION, position);
let finished = cc.callFunc(()=>{
callback&&callback();
});
block.runAction(cc.sequence(action, finished))
},
// 合并
doMerge(b1, b2, num, callback) {
// b1.destroy(); // 合并后销毁
this.myPool.put(b1);
this.node.scale = 1;
let scale1 = cc.scaleTo(0.1, 1.1);
let scale2 = cc.scaleTo(0.1, 1.0);
let mid = cc.callFunc(()=>{
if(num in scores) {
this.updateScore(this.score + scores[num]);
if(num == this.extraBonus){
this.extraBonus = num * 2;
this.updateScore(this.score + num);
}
}
b2.getComponent('block').setNumber(num);
});
let finished = cc.callFunc(()=>{
callback && callback()
});
let abc = cc.speed(cc.sequence(scale1, mid, scale2, finished),0.5);
b2.runAction(abc);
},
这是个2048,可以上下左右滑动 ,当我滑动足够快,就会出现

cc.sequence 顺序执行完毕再执行合并逻辑,正常不应该出错,但是滑动特别快时会出错