错误#2006:提供的索引超出范围

时间:2013-12-06 21:14:29

标签: indexing bounds

我一直在

Error #2006: The supplied index is out of bounds.
at flash.display::DisplayObjectContainer/getChildAt()
at Main/onFrame()

这主要是指代码的这一部分

else if (comp) //if completion is true
    {
        var animation = char.getChildAt(2); //
        if (animation.currentFrame == animation.totalFrames)
            {
                animation.stop();
                addChild(end);

我在第二帧拉动的动画也没有运行,虽然我已经检查了符号及其中的帧,但它应该可以正常工作。我对代码很陌生,这是我到目前为止所教的内容。

这是我的其余代码。 我们应该做一个基本的游戏,让我们的角色走向强大并进行强化动画,然后是最终游戏标题。

package 
{
import flash.display.MovieClip;
import fl.motion.easing.Back;
import flash.sampler.Sample;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;

    public class Main extends MovieClip
    {
        var bg:Background;
        var b:Bubbles;
        var b2:Bubbles;
        var s:Seaweed;
        var pressingRight:Boolean = false;
        var pressingLeft:Boolean = false;
        var comp:Boolean = false;
        var speed:int = 10;
        var char:Character;
        var pu:PowerUp;
        var hit:hit1
        var end:EndGame;

        public function Main()
        {               
                            bg = new Background;
            addChild(bg);

            char = new Character();
            addChild(char);
            char.x = stage.stageWidth/2;
            char.y = 488;

            b = new Bubbles();
            addChild(b);
            b2 = new Bubbles();
            addChild(b2);
            b2.y = +b2.height;
            s = new  Seaweed();
            addChild(s);

            pu = new PowerUp();
            addChild(pu);
            pu.x = 200;
            pu.y = 450;
            pu.height = 50;
            pu.scaleX = pu.scaleY;
            pu.gotoAndStop("SPIN");

            hit = new hit1;
            addChild(hit);
            hit.x = char.x
            hit.y = char.y - 50

            end = new EndGame();
            end.x = stage.stageWidth/2;
            end.y = stage.stageHeight/2;

            stage.addEventListener(Event.ENTER_FRAME, onFrame);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
            stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);

        }//main()

                    public function onFrame(e:Event)
                    {
                    if (!comp)
                        //Bubble Movement
                            b.y -= 1;
                            b2.y -= 1;

                        if (b.y >= stage.stageHeight) 
                        {
                            b.y = b2.y + bg.height;
                        }
                        else if (b2.y >= stage.stageHeight) 
                        {
                            b2.y = b.y + b2.height;
                        }

                        //Background & Character Movement

                        if (pressingRight && char.x < stage.stageWidth/2)
                            {
                                char.x += speed * 0.4
                            }
                        else if (pressingRight == true && (bg.width + bg.x) > stage.stageWidth)
                        {
                            bg.x -= speed * 0.4;
                            s.x -= speed * 0.6;
                            pu.x -= speed * 0.4;
                        }
                            else if (pressingRight == true)
                            {
                                char.x += speed * 0.4;
                            }

                        if (pressingLeft == true && char.x > stage.stageWidth/2)
                            {
                                char.x -= speed * 0.4;
                            }
                                else if (pressingLeft == true && bg.x <0)
                                {
                                    bg.x += speed * 0.4;
                                    s.x += speed * 0.6;
                                    pu.x += speed * 0.4;

                                }
                                else if (pressingLeft)
                                {
                                    char.x -= speed * 0.4;
                                }
                                    //Boundaries
                                    if (char.x > stage.stageWidth)
                                        {
                                            char.x = stage.stageWidth;
                                        }
                                    else if (char.x < 0)
                                        {
                                             char.x = 0;
                                        }



                        //Character Looking Directions
                        if (pressingLeft == true)
                            {
                                char.scaleX = -1;
                                hit.x = char.x
                            }
                            if (pressingRight == true)
                            {
                                char.scaleX = 1;
                                hit.x = char.x
                            }


                                    //Character Movements
                                    if (pressingRight || pressingLeft)
                                        {
                                            char.gotoAndStop("WALK");
                                        }

                                    else if (!pressingRight || !pressingLeft)
                                        {
                                            char.gotoAndStop("IDLE");
                                        }



               //Getting the Power up
                if (pu.hitTestObject(hit))
                        {
                            char.gotoAndStop("POWER");
                            comp = true;  
                            pu.gotoAndStop("GONE");
                        }



                    // !end



        else if (comp) //if completion is true
            {
                var animation = char.getChildAt(2); //
                if (animation.currentFrame == animation.totalFrames)
                    {
                        animation.stop();
                        addChild(end);

                    }

            }//Comp

                    }//onFrame


    public function keyPressed(k:KeyboardEvent)
    {
    if (k.keyCode == Keyboard.RIGHT)
        {
            pressingRight = true;

        }
    else if (k.keyCode == Keyboard.LEFT)
        {
            pressingLeft = true;
        }


    } // keyPressed()

                        public function keyReleased(k:KeyboardEvent)
                        {
                            if (k.keyCode == Keyboard.RIGHT)
                                {
                                    pressingRight = false;
                                }
                            else if (k.keyCode == Keyboard.LEFT)
                                {
                                    pressingLeft = false;
                                }
                        } // keyReleased()





    }//public class()
}//package()

1 个答案:

答案 0 :(得分:0)

如果您使用的语言采用从零开始的索引(其中数组索引从0开始,而不是1)那么这可能是问题所在。

第1帧将位于索引[0],而第2帧将位于索引[1]。

如果您有两个帧,例如并尝试访问索引[2]的帧,那么您将超出数组的范围,这可能就是您收到该错误消息的原因。