求教,这段代码是什么意思?

请问下 为啥初始化时用 var xIndex = arguments[1][0]//??? var count = arguments[1][1]//???
还有 this.node.runAction(action) 里面的action 是不是数组动作,是不是几个动作变成数组,也可以node.runAction([])

var actionAry = [] //建立一个动作数组 ???
var self = this // 用于闭包
//消除
var count = 0 //初始化,下面遍历需要
for (var i = 0; i < xcList.length; i++) {//遍历二维数组中一个方向
var oneList = xcList[i] //赋值
for (var j = 0; j < oneList.length; j++) { //遍历二维数组中另一个方向
var xIndex = oneList[j] //赋值
//将粒子特效加入
actionAry.push(cc.callFunc(function(){
var xIndex = arguments[1][0]//???
var count = arguments[1][1]//???
var effNode = cc.instantiate(this.boomEffPrefab)
this.frameList[xIndex].addChild(effNode)

                //加分飘字
                var tipNode = cc.instantiate(this.tipPrefab)
                var label = tipNode.getComponent(cc.Label)
                label.string = "+" + this.getAddScoreCal(count)
                this.frameList[xIndex].addChild(tipNode)
            }, this, [xIndex, count]))

            //方块的本身消除
            actionAry.push(cc.callFunc(function(){
                var xIndex = arguments[1]//?????
                this.frameList[xIndex].isHaveFK = null

                var FKNode = this.frameList[xIndex].getChildByName("colorSpr")
                if (!FKNode) {
                    return//防止没有这个方块的时候
                }
                //FKNode.removeFromParent()

               FKNode.cascadeOpacity = true
                //这个假方块变大并且渐隐掉
                FKNode.runAction(cc.sequence(
                    cc.spawn(cc.scaleTo(0.5, 2), cc.fadeOut(0.5)),
                    cc.removeSelf(true)
                ))
                
            }, this, xIndex))

            actionAry.push(cc.delayTime(0.1))

            count++
        }

}

    if (actionAry.length > 0) {
        actionAry.push(cc.callFunc(function(){
            this.isDeleting = false
            this.checkIsLose()
        }, this))

        this.isDeleting = true
        var action = cc.sequence(actionAry)
        this.node.runAction(action)

        //加分
        this.addScore(count)
    }

代码来源 https://github.com/WuBuzi/LBXGame

//整一个都是表现逻辑
        
        var actionAry = []
        var self = this
        //消除
        var count = 0
        for (var i = 0; i < xcList.length; i++) {

            var oneList = xcList[i]
            for (var j = 0; j < oneList.length; j++) {
                var xIndex = oneList[j]

                actionAry.push(cc.callFunc(function(){
                    var xIndex = arguments[1][0]
                    var count = arguments[1][1]
                    var effNode = cc.instantiate(this.boomEffPrefab)
                    this.frameList[xIndex].addChild(effNode)

                    //加分飘字
                    var tipNode = cc.instantiate(this.tipPrefab)
                    var label = tipNode.getComponent(cc.Label)
                    label.string = "+" + this.getAddScoreCal(count)
                    this.frameList[xIndex].addChild(tipNode)
                }, this, [xIndex, count]))


                actionAry.push(cc.callFunc(function(){
                    var xIndex = arguments[1]
                    this.frameList[xIndex].isHaveFK = null

                    var FKNode = this.frameList[xIndex].getChildByName("colorSpr")
                    if (!FKNode) {
                        return//防止没有这个方块的时候
                    }
                    //FKNode.removeFromParent()

                    FKNode.cascadeOpacity = true
                    //这个假方块变大并且渐隐掉
                    FKNode.runAction(cc.sequence(
                        cc.spawn(cc.scaleTo(0.5, 2), cc.fadeOut(0.5)),
                        cc.removeSelf(true)
                    ))
                    
                }, this, xIndex))

                actionAry.push(cc.delayTime(0.1))

                count++
            }
            
        }

        if (actionAry.length > 0) {
            actionAry.push(cc.callFunc(function(){
                this.isDeleting = false
                this.checkIsLose()
            }, this))

            this.isDeleting = true
            var action = cc.sequence(actionAry)
            this.node.runAction(action)

            //加分
            this.addScore(count)
        }

这里:
####var action = cc.sequence(actionAry)

node运行的动作是这个cc.sequence,而cc.sequence是可以用js数组作为参数构建出一序列动作的。

1赞

大神留个联系方式,求请教呀。

我教你怎么看代码,把全部注释掉

放出一小段开游戏看效果

理解了再放出另一小段,我看官方范例都是这么看的。全部一起看是看不出所以然的。

谢谢,学习了,我一般看一段时间,然后照着抄几遍,最后自己再写,慢慢熬懂的。

这里为啥要用arguments 为啥不能用 Array

你可以改一改试试。

我改过了,无法运行,网上说arguments是对象,具有数组性质,所以我是这么理解的,你看对不对。 arguments[1][0] arguments[1][1] 是[xIndex, count] 的对象,arguments[1][0] 为xIndex , arguments[1][1]为count,var xIndex = arguments[1][0] var count = arguments[1][1] 这段为重新赋值。 主要是为了闭包。

本质原因是因为在cc.callFunc()里面,外面的变量都没办法识别,所以就这样子用了。JS的函数在函数内部有一个arguments就是存有实际参数的数组的。