项目报错:Uncaught TypeError: Cannot read property 'x' of undefined

引擎版本:1.5.2
具体情况:遍历生成对象,设定了贝塞尔曲线的运动轨迹,从场景外进入。一些小的对象(size:378,240)生成进入没有问题,但一些大的对象(size:450,310)就会报这个错。
直接点开第一行 at Object.228.cc.pSub (cocos2d-js-for-preview.js:83744) 显示 cocos2d-js-for-preview.js 里面是空的。
但是通过文件夹打开,又能找到 cocos2d-js-for-preview.js 是存在的。

(因为我全程是通过小的对象去写这个脚本的,所以没留意会有这种问题。。当我检测小的对象不停遍历生成没有问题,就增加其他的对象进去了,但当大的对象遍历进去就出现这问题了)

现在完全没有头绪怎么做,想问问大大们能看出来是什么问题吗?

Uncaught TypeError: Cannot read property 'x' of undefined
    at Object.228.cc.pSub (cocos2d-js-for-preview.js:83744)
    at TheClass.startWithTarget (CCActionInterval.js:1823)
    at TheClass.update (CCActionInterval.js:416)
    at TheClass.step (CCActionInterval.js:161)
    at TheClass.update (CCActionManager.js:417)
    at TheClass.update (CCScheduler.js:401)
    at TheClass.mainLoop (CCDirector.js:1383)
    at callback (CCGame.js:561)

附上

getJSONFishPath: function (Type) {

    var self = this;
    cc.loader.loadRes("fish_h5/path", function (err, text) {

        var pathAll = text["path"],
            randomGroup = [];


        var randomGroupR = [],
            randomGroupMax = 1;
        for (let r = 0; r < pathAll.length; r++) {
            randomGroupR[r] = pathAll[r]["randomGroup"];
            if (randomGroupR[r] > randomGroupMax) {
                randomGroupMax = parseInt(randomGroupR[r])

            }
        }


        if (self.randomRoad == null || self.randomRoad == undefined) {

            self.randomRoad = Math.ceil(cc.random0To1() * randomGroupMax)
        } else {
            var index = self.randomRoad;
            var zRandomGroup = [];
            for (let z = 1; z < randomGroupMax + 1; ++z) {
                zRandomGroup.push(z);
            }

            zRandomGroup.splice(index, 1)

            var afterSpliceRandomRoad = Math.floor(zRandomGroup.length * cc.random0To1())

            self.randomRoad = zRandomGroup[afterSpliceRandomRoad]
        }

        var IDGroup = [];

        for (var n = 0; n < pathAll.length; n++) {
            if (pathAll[n]["type"] == Type && pathAll[n]["randomGroup"] == self.randomRoad) {
                IDGroup.push(pathAll[n]["ID"]);
            }

        }

        var OnlyOneID = Math.floor(cc.random0To1() * IDGroup.length);
        var OkID = IDGroup[OnlyOneID]

        for (var i = 0; i < pathAll.length; i++) {

            if (pathAll[i]["ID"] == OkID) {


                var Cparameter = pathAll[i]["parameter"];

                var CcoordinateAll = Cparameter.split(";"),
                    XcoordinateValue = [],
                    Xcoordinate = [],
                    distance = [],
                    distanceAll = 0;

                for (var j = 0; j < CcoordinateAll.length; j++) {
                    XcoordinateValue[j] = CcoordinateAll[j].split(",");
                    Xcoordinate[j] = cc.p(parseInt(XcoordinateValue[j][0]), parseInt(XcoordinateValue[j][1]))
                    if (j < CcoordinateAll.length && j > 0) {
                        distance.push(cc.pDistance(Xcoordinate[j - 1], Xcoordinate[j]))
                        distanceAll = distanceAll + cc.pDistance(Xcoordinate[j - 1], Xcoordinate[j])
                    }
                }


                self.node.setPosition(Xcoordinate[0])

                var timeMin = pathAll[i]["timeMin"],
                    timeMax = pathAll[i]["timeMax"];

                var bezierAllTime = parseInt(timeMin) + parseInt((timeMax - timeMin) * cc.random0To1());

                var bezierLength = Math.floor(Xcoordinate.length / 2)



                var beziercheck = bezierLength % 2,
                    bezierTime = null,
                    bezierGroup = [];


                bezierGroup.length = bezierLength;
                for (var o = 0; o < bezierLength; o++) {

                    var a = o * 2;
                    var b = o * 2 + 1;
                    if (o != (bezierLength - 1)) {
                        var c = o * 2 + 2
                        bezierTime = (distance[a] + distance[b]) / distanceAll * bezierAllTime
                    } else {
                        var c = o * 2 + 1 * beziercheck + 1;
                        bezierTime = (distance[a] + beziercheck * distance[a + beziercheck * 1]) / distanceAll * bezierAllTime
                        self.lastPosition = Xcoordinate[c]
                    }

                    bezierGroup[o] = cc.bezierTo(bezierTime, [Xcoordinate[a], Xcoordinate[b], Xcoordinate[c]])
                }

                var bezierSingle = bezierGroup[0]
                if (bezierGroup.length > 1) {
                    self.ac = self.node.runAction(cc.sequence(bezierGroup));
                } else {
                    self.ac = self.node.runAction(bezierSingle)
                }

            }
        }

    })
},

这个应该是你传入的坐标为空导致的

1赞

谢谢jare大神:blush::blush:

一个一个打log测出来了,是最后一个 var c = o * 2 + 1 * beziercheck + 1; 传进去一个undefined了。
生成了一个错误的坐标

导致引擎运行找不到坐标,直接报错