0

我是新来的,对 AS3 也很陌生。所以这是我的疯狂问题:

为什么我会收到此错误:TypeError: Error #1010: A term is undefined and has no properties。在 MethodInfo-1()

对于我正在处理的这个功能:

    /* a universal function for all the movieclips */
function clickAndPlay(element):Function {

    /* return the click event */
    return function(e:Event):void {

        /* stop the event from propagating */
        e.stopPropagation();

        /* get the labels from the clip */
        var labels:Array = element.currentLabels;
        var numFrm:Number = labels.length; /* count them */

        /* if there are no labels for this clip, get the frame length instead */
        if(numFrm == 0) {
            /* get the number of frames */
            numFrm = element.totalFrames;
            trace(numFrm);
            if(element.currentFrame < numFrm) {
                element.nextFrame();
            }else{
                element.gotoAndStop(1);
            }
        }else{
            /* get the current index of the labels array */
            for(var i:Number = 0; i < numFrm; i++) {
                if(labels[i].name == element.currentLabel) {
                    if(i < numFrm) {
                        /* get the next label's name */
                        var labelName:String = labels[(i+1)].name;
                        /* go to the next label */
                        trace(labelName);
                        element.gotoAndStop(labelName);
                    }else{
                        element.gotoAndStop(1);
                    }
                }
            }
        }
    };
}

我不知道这个函数是指什么。我已经检查以确保框架上的标签准确无误,并且确实如此。我敢肯定它有些愚蠢,但任何帮助将不胜感激。提前致谢。

肖恩

4

1 回答 1

0

我相信你需要:

if (i < (numFrm-1)) {

而不是

if (i < numFrm) {

否则下一行在尝试访问标签时会出错[(i+1)]

编辑:

考虑 i = numFrm-1 的情况(即:循环的最后一次迭代):

标签[(i+1)].name 与标签[(numFrm-1+1)].name 或标签[numFrm].name 相同

但是,标签的长度是 numFrm (这是您从中获得 numFrm 值的地方),因此您试图访问标签的不存在元素 - 数组从零开始索引,而不是 1;所以如果标签有 6 个项目,最后一个将是标签 [5],而不是标签 [6]

于 2013-04-07T20:52:07.003 回答