我可以看到赛艇运动员 #1010

as3 array error #1010

我基本上是在尝试制作一个迷你游戏,你必须使用屏幕上的按钮(屏幕左侧和右侧的按钮)来躲避迎面而来的物体,当我用一个单独的物体来做时它工作得很好然后我决定拥有更多的对象并制作一个数组来保存它们。那是错误累积的时候。

错误是: TypeError:错误 #1010:术语未定义且没有 properties.at Untitled_fla::MainTimeline/cyclespeed()

我没有足够的代表点来发表评论,所以我会批评我在您的代码中看到的内容。

代码有不少错误。

这被声明了两次,一次在 for 循环中,一次在函数之外

addEventListener(Event.ENTER_FRAME, cyclespeed);

您将 "handleCollision" 事件附加到舞台上,而不是影片剪辑。

handleCollision 引用 "cycle[i]" 但 i 超出范围,因为它不属于声明 i 的 for 循环

function handleCollision( e:Event) : void {
    if(box_MC.hitTestObject(cycle[**i**])) {
        trace ("true");
        box_MC.x += 4;
    }
}

我建议一次构建每一个部分,因为看起来你试图一次做很多事情,但实际上没有任何工作。

  • 您的 cycle Array 有 5 个元素,从索引 0 开始,到 4 结束:

    ... Array indices are zero-based, which means that the first element in the array is [0], the second element is [1], and so on.

That's why your for loop should be like this :

for (var i:int = 0; i < 5; i++) { }

for (var i:int = 0; i <= 4; i++) { }

或者干脆

for (var i:int = 0; i < cycle.length; i++) { }
  • 在您的 cyclespeed 函数中,您的 i 变量的值将始终为 5,这是最后分配的值在你的 for 循环中加入它,当然 cercle[5] 不存在,这就是你得到 TypeError: Error #1010: A term is undefined and has no properties 的原因:cercle[5] 未定义并且没有 x 属性.

  • 在您的情况下,您只能使用一个 Event.ENTER_FRAME 侦听器来完成所有工作,如下所示:

    stage.addEventListener(Event.ENTER_FRAME, onEnterThisFrame);
    function onEnterThisFrame(e:Event):void {
        box_MC.x -= 1;
        for (var i:int = 0; i < cycle.length; i++) {
            cycle[i].x += 1;
            if(box_MC.hitTestObject(cycle[i])) {
                trace ("true");
                box_MC.x += 4;
            }
        }
        if (movingdown == 1) {
            box_MC.y -=  4.5;
        } else if (movingup == 1) {
            box_MC.y +=  4.5;
        }
    }
    </pre>

希望能帮到你。