Actionscript 行动脚本3:“;TypeError:Error“1009:无法访问空对象引用的属性或方法。”;接通开关

Actionscript 行动脚本3:“;TypeError:Error“1009:无法访问空对象引用的属性或方法。”;接通开关,actionscript,Actionscript,我正在用ActionScript3和嵌套的开关盒编写一个简单的菜单。 它所做的是用所选菜单检查当前帧,如果所选菜单引用另一个菜单,则进行转换,然后转到所选帧,如果所选菜单是当前帧,则跟踪一条简单消息。 但是当选定的菜单和当前帧相等时,我收到了这个恼人的消息,我不知道我要做什么来解决这个问题 我的代码是: //Import TweenMax import com.greensock.*;; import com.greensock.plugins.*; import flash.events.Mo

我正在用ActionScript3和嵌套的开关盒编写一个简单的菜单。 它所做的是用所选菜单检查当前帧,如果所选菜单引用另一个菜单,则进行转换,然后转到所选帧,如果所选菜单是当前帧,则跟踪一条简单消息。 但是当选定的菜单和当前帧相等时,我收到了这个恼人的消息,我不知道我要做什么来解决这个问题

我的代码是:

//Import TweenMax
import com.greensock.*;;
import com.greensock.plugins.*;
import flash.events.MouseEvent;

var frameNumber:int = currentFrame;

TweenPlugin.activate([BlurFilterPlugin]);

//Add the buttons into an array
var buttonsArray:Array = new Array(s1t1,s1t2,s1t3,s1t4,s1t5);

//Loop through the buttons array
for (var i:uint = 0; i < buttonsArray.length; i++) {
    //Add event listeners for the button
    buttonsArray[i].addEventListener(MouseEvent.MOUSE_OVER, mouseOverButton);
    buttonsArray[i].addEventListener(MouseEvent.CLICK, buttonClicked);
}

//Move the buttonBackground under the home button (= starting position)
buttonBackground.x = s1t1.x;
buttonBackground.y = s1t1.y;

//Make the buttonBackground a bit bigger than the home button
buttonBackground.width = s1t1.width + 10;
buttonBackground.height = s1t1.height + 10;

//Tween the buttonBackground to a random color using TweenMax
TweenMax.to(buttonBackground, 0.1, {tint: Math.random() * 0xffffff});

//This function is called when the mouse is over a button
function mouseOverButton(e:MouseEvent):void {
    //trace(e.target.name + " was touched!");
    //Assign the button to a local variable
    var button:MovieClip = (MovieClip)(e.target);

    //Calculate the new target width and height for the buttonBackground
    var targetWidth:Number = button.width + 10;
    var targetHeight:Number = button.height + 10;

    //Tween the buttonBackground's position, size and color (color is random)
    TweenMax.to(buttonBackground, 0.5, {x: button.x, y: button.y,
    width:targetWidth, height:targetHeight, tint: Math.random() * 0xffffff});
}

//This function is called when a button is clicked
function buttonClicked(e:MouseEvent):void {
    switch(e.target.name){
        case "s1t1":
            switch (currentFrame){
                case 5:
                    trace("Nowhere to go!");
                break;
                case 6:
                    var myTM:TransitionManager = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 7:
                    var myTM:TransitionManager = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    var myTM:TransitionManager = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    var myTM:TransitionManager = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 5;
            myTM.addEventListener("allTransitionsOutDone", doneTrans)
        break;
        case "s1t2":
            switch (currentFrame){
                case 5:
                    var myTM:TransitionManager = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    trace("Nowhere to go!");
                break;
                case 7:
                    var myTM:TransitionManager = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    var myTM:TransitionManager = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    var myTM:TransitionManager = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 6;
            myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
        case "s1t3":
            switch (currentFrame){
                case 5:
                    var myTM:TransitionManager = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    var myTM:TransitionManager = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 7:
                    trace("Nowhere to go!");
                break;
                case 8:
                    var myTM:TransitionManager = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    var myTM:TransitionManager = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 7;
            myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
        case "s1t4":
            switch (currentFrame){
                case 5:
                    var myTM:TransitionManager = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    var myTM:TransitionManager = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    trace("Nowhere to go!");
                break;
                case 7:
                    var myTM:TransitionManager = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    var myTM:TransitionManager = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 8;
            myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
        case "s1t5":
            switch (currentFrame){
                case 5:
                    var myTM:TransitionManager = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    var myTM:TransitionManager = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 7:
                    var myTM:TransitionManager = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    var myTM:TransitionManager = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    trace("Nowhere to go!");
                break;
            }
            frameNumber = 9;
            myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
    }
}
function doneTrans(e:Event):void{
    trace("Going frame: "+frameNumber);
    gotoAndStop(frameNumber);
}

问题是当你在myTM中添加一个事件监听器时,它不在那里(当点击当前页面的菜单按钮时),所以我做了一个快速修复,检查myTM是否被实例化(非空),如果是,添加事件监听器,希望它能解决你的问题

将按钮单击功能替换为以下功能:

function buttonClicked(e:MouseEvent):void {
    //declaring new variables inside conditional cases is a bad practice
    var myTM:TransitionManager;
    switch(e.target.name){
        case "s1t1":
            switch (currentFrame){
                case 5:
                    trace("Nowhere to go!");
                break;
                case 6:
                    myTM = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 7:
                    myTM = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    myTM = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    myTM = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 5;
            //myTM.addEventListener("allTransitionsOutDone", doneTrans)
        break;
        case "s1t2":
            switch (currentFrame){
                case 5:
                    myTM = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    trace("Nowhere to go!");
                break;
                case 7:
                    myTM = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    myTM = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    myTM = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 6;
            //myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
        case "s1t3":
            switch (currentFrame){
                case 5:
                    myTM = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    myTM = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 7:
                    trace("Nowhere to go!");
                break;
                case 8:
                    myTM = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    myTM = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 7;
            //myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
        case "s1t4":
            switch (currentFrame){
                case 5:
                    myTM = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    myTM = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    trace("Nowhere to go!");
                break;
                case 7:
                    myTM = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    myTM = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 8;
            //myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
        case "s1t5":
            switch (currentFrame){
                case 5:
                    myTM = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    myTM = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 7:
                    myTM = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    myTM = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    trace("Nowhere to go!");
                break;
            }
            frameNumber = 9;
            //myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
    }

    //if myTM is not null (not empty) add the event listener
    if (myTM)
    {
        myTM.addEventListener("allTransitionsOutDone", doneTrans);
    }
}

您的代码还有很大的改进空间,例如,可以使用一个开关或许多更好的方法重新编写代码,但我不想对您的代码进行大量更改。

您好,谢谢。它解决了我的问题。我真的很感谢你的帮助,一旦我获得足够的声誉,我会投票支持你的答案。。再次感谢。如果你能改进它,我会很高兴,我也能从编程中吸取教训。
function buttonClicked(e:MouseEvent):void {
    //declaring new variables inside conditional cases is a bad practice
    var myTM:TransitionManager;
    switch(e.target.name){
        case "s1t1":
            switch (currentFrame){
                case 5:
                    trace("Nowhere to go!");
                break;
                case 6:
                    myTM = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 7:
                    myTM = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    myTM = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    myTM = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 5;
            //myTM.addEventListener("allTransitionsOutDone", doneTrans)
        break;
        case "s1t2":
            switch (currentFrame){
                case 5:
                    myTM = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    trace("Nowhere to go!");
                break;
                case 7:
                    myTM = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    myTM = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    myTM = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 6;
            //myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
        case "s1t3":
            switch (currentFrame){
                case 5:
                    myTM = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    myTM = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 7:
                    trace("Nowhere to go!");
                break;
                case 8:
                    myTM = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    myTM = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 7;
            //myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
        case "s1t4":
            switch (currentFrame){
                case 5:
                    myTM = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    myTM = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    trace("Nowhere to go!");
                break;
                case 7:
                    myTM = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    myTM = new TransitionManager(s1text5);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                default:
                    trace("Nowhere to go!");
            }
            frameNumber = 8;
            //myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
        case "s1t5":
            switch (currentFrame){
                case 5:
                    myTM = new TransitionManager(s1text1);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 6:
                    myTM = new TransitionManager(s1text2);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 7:
                    myTM = new TransitionManager(s1text3);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 8:
                    myTM = new TransitionManager(s1text4);
                    myTM.startTransition({type:Fade, direction:Transition.OUT, duration:0.25, easing:Back.easeOut});
                break;
                case 9:
                    trace("Nowhere to go!");
                break;
            }
            frameNumber = 9;
            //myTM.addEventListener("allTransitionsOutDone", doneTrans);
        break;
    }

    //if myTM is not null (not empty) add the event listener
    if (myTM)
    {
        myTM.addEventListener("allTransitionsOutDone", doneTrans);
    }
}