Flash 动作脚本 3.0 错误 1120

Flash Action Script 3.0 error 1120

所以我已经到了不得不问一个问题的地步,我已经翻了 3 页 google 几个小时了。希望大家帮帮我。

我很确定我已经定义了 var UsedSlot,但它显示错误 1120。 我已经试过把它放在不同的线路上,比如在定时器之前和之后。我只是一个新手,我的学期项目需要这个。

这是错误
场景 1,图层 'Player',帧 1,第 55 行 1120:访问未定义的 属性 UsedSlot。
场景 1,图层 'Player',帧 1,第 62 行 1120:访问未定义的 属性 UsedSlot。
场景 1,图层 'Player',帧 1,第 90 行 1120:访问未定义的 属性 UsedSlot。
场景 1,图层 'Player',帧 1,第 91 行 1120:访问未定义的 属性 UsedSlot。

            stop();

            import flash.display.MovieClip;
            import flash.events.Event;
            import fl.motion.MotionEvent;
            import flash.utils.Timer;
            import flash.events.TimerEvent;


            //initialize objects
            var PlayerItems:Array = [new Items_Player_Cheese(),
                                     new Items_Player_Cheese(),
                                     new Items_Player_Cheese(),
                                     new Items_Player_Cheese(),
                                     new Items_Player_Cheese(),];

            //hard code test ***working***
            /*PlayerItems[0].x = Guide_Test_Start.x;
            PlayerItems[0].y = Guide_Test_Start.y;
            stage.addChild(PlayerItems[0]);*/
            ///////////////////

            var j:int;
            var SlotUsed:Array = new Array(PlayerItems.length);
            for(j = 0 ; j < SlotUsed.length; j++)
            {
                SlotUsed[j] = -1
                trace(SlotUsed[j]);
            }

            for(j = 0; j < PlayerItems.length; j++)
            {
                PlayerItems[j].x = Guide_Test_Start.x;
                PlayerItems[j].y = Guide_Test_Start.y;
            }

            var PlaceOccupied:Array = [false,false,false,false,false];

            //check if a place is unoccupied
            var myTimer:Timer = new Timer(3000);
            myTimer.addEventListener(TimerEvent.TIMER, CheckVacancy);
            myTimer.start();


            //choose a starting location
            var CVSync:int;
            function CheckVacancy(e:TimerEvent)
            {
                for(CVSync = 0 ; CVSync < 5; CVSync++)
                {
                    if(PlaceOccupied[CVSync] == false)
                    {
                        // Put an object
                        var ItemIndex = randomRange(0,PlayerItems.length - 1);
                        while(UsedSlot[ItemIndex] > -1)
                            ItemIndex = randomRange(0,PlayerItems.length - 1);

                        trace("Item["+ItemIndex+"] placed on ["+CVSync+"]");
                        PlayerItems[ItemIndex].x = StartGuide[CVSync].x;
                        PlayerItems[ItemIndex].y = StartGuide[CVSync].y;

                        UsedSlot[j] = ItemIndex;
                        PlaceOccupied[CVSync] = true;
                        trace("Vacant Slot Filled" + getTimer() + " ms");
                        break;
                    }
                }
            }

            //Instantiate the objects
            for(j = 0; j < PlayerItems.length; j++)
            {
                trace("Adding Player Items");
                stage.addChild(PlayerItems[j]);
            }



            //Add Listener To determine A hit
            for(j = 0; j < PlayerItems.length; j++)
            {
                PlayerItems[j].addEventListener(MouseEvent.MOUSE_UP, MUp);
            }
            function MUp(e:MouseEvent):void
            {
                for(j = 0; j < PlayerItems.length; j++)
                {
                    if(PlayerItems[j].hitTestObject(MyItem[0]))
                    {
                        CVSync[UsedSlot[j]] = false;
                        UsedSlot[j] = -1;

                        PlayerItems[j].x = -100;
                        trace("Point by: " + MyItem[0].name.toString());
                        break;
                    }
                }
            }


            /*cheese.addEventListener(MouseEvent.MOUSE_UP, MUp);
            function MUp(e:MouseEvent):void{
                if(cheese.hitTestObject(MyItem[0]))
                {
                    trace("Cheese Eaten by: " + MyItem[0].name.toString());
                    cheese.x = Guide_Test_Start.x;
                    cheese.y = Guide_Test_Start.y;
                }
            }*/

            function randomRange(minNum:Number, maxNum:Number):Number 
            {
                return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
            }

I'm pretty sure i've defined var UsedSlot

不,你不知道,这就是问题所在。

名称 UsedSlot 在您发布的代码段中出现了 4 次,这些行导致了 4 次错误。 None 其中违背了变量。

然而你确实定义了另一个变量:

var SlotUsed:Array

在您的代码中。

如果不清楚:这是两个不同的变量。仅仅因为您在代码中的某处定义了一个变量 SlotUsed 并不意味着您可以通过其他名称访问它,例如 UsedSlot。 这是区分大小写的,这意味着 SlotUsedslotUsed 不被认为是相同的。

作为建议,"being pretty sure" 在查找此类问题时通常毫无价值。相反,通过找到声明来证明它。如果您找不到它,它可能不存在。毕竟编译器是找不到的

变量名以小写字母开头是一种常见的约定,这有助于将它们与 类(或接口...)的名称区分开来。 虽然您可以选择按照自己的意愿编写代码,但如果您遵守通用约定,其他人会更容易阅读您的代码,从而简化帮助您的任务。 =)