想问问你们怎么解决动作后,再执行的问题,绝不是没研究就发问。

我也是在做三消游戏时遇到这个问题,我并不知道动作什么时候结束,完美的想法是动作结束后就做什么。
cc.sequence,component.scheduleOnce,甚至什么setTimeout都用过,结果是动作一般都能完美执行,就是在delay后该执行执行,但是记录消除块位置信息的MAP不能及时更新,(该MAP记录那个位置是什么块的一个键值对表,比如01点是chess1),不及时表现在,块都落下来了,MAP中的记录的那个位置还是null,我现在想到的补救办法是:把消除的那块不是真消除而是替换成一个名字是UUID的新块,播放他的下落效果而已。这不怎么舒服的。求救,谢谢。

cc.sequence(action1,action2,action3,…,cc.callFunc(()=>{

//在这里面干你想要做的事情

}))

http://forum.cocos.com/t/topic/60175

亲,的确这么回事,我现在也这么写的,只不过就是不知道什么时候动作结束,或者说我动作结束就怎么怎么样,只能靠着cc.timeDelay完了,cc.callFunc这种sequence串来执行,有点感觉不舒服。

其实说什么,逻辑和执行效果分开来。我觉得本质上是因为schedule和sequence之类不能和for共存。

我这样写一个方法
destroyItemStep2: function () {

    this.createArray = new Array();
   // this.createPosArray = new Array();
    this.c = 0;
    this.schedule(
        function () {
      
            var nameArray = this.destroyArray[this.c];
            let board = this.node.getChildByName("chessBoard");
                if (nameArray != null) {

                    for (var j = 0; j < nameArray.length; j++) {
                        var item = board.getChildByName(nameArray[j]);
                        if (item!=null){
                            item.getComponent("chess").destroySelf();
                          
                        }
                    }
                    this.pubDelay += G.DESTROY_DELAY_TIME;
            }
               this.c++;
                if (this.c > this.destroyArray.length)
                {
                  //  this.judgeDown();
                   // this.scheduleOnce(this.judgeDown.bind(this, this.destroyArray.length * G.DESTROY_DELAY_TIME + 0.1), G.DESTROY_DELAY_TIME + 0.1);
                }
        },1, this.destroyArray.length,0);


    
    return this.destroyArray.length * G.DESTROY_DELAY_TIME ;
  

},

在自己单独执行时执行正常。
但在他前面写几个for循环来执行刷新矩阵逻辑就会出错,就不是按顺序一个一个执行了。就会失效,块会一并消除。