字符串和变量

时间:2013-12-26 19:48:45

标签: actionscript-3 function variables

我的代码:

var nameOfMc:String = "";

function moverMc(nameOfMc:String):void {
    nameOfMc.play();
}

function handleCollision( e:Event ):void{
    var _point:Point = localToGlobal(new Point(mouseX,mouseY));

    if(bigCircle_mc.hitTestPoint(_point.x,_point.y,true)){
           output_txt.text = "BIGCIRCLE"
           nameOfMc = "bigCircle_mc";
           moverMc(nameOfMc);
    }else{
        if(circle_mc.hitTestPoint(_point.x,_point.y,true)){
               output_txt.text = "CIRCLE"
               nameOfMc = "circle_mc";
               moverMc(nameOfMc);
        }else{
            if(rect_mc.hitTestPoint(_point.x,_point.y,true)){   
                output_txt.text = "RECT"
                nameOfMc = "rect_mc"
                moverMc(nameOfMc);
            }else{
                output_txt.text = ""
                stopAll();
                nameOfMc = ""
            }
        }
    }

我的问题:

在函数moverMc中,我希望Flash与“bigCircle_mc.play();”相同。如果鼠标位于大圆圈上,例如“rect_mc.play();”如果鼠标悬停在矩形上......

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您的moverMc函数错误:nameOfMc是一个字符串,而不是显示对象,因此您无法播放它:String类型没有play()方法

您需要做的是找到DisplayObject变量中包含名称的nameOfMc实例。 (影片剪辑是显示对象。)

要按名称查找DisplayObject,您可以在包含您要查找的影片剪辑的容器上使用getChildByName()功能。 (例如,Stage可以是此容器,但它可以是显示链中的任何其他DisplayObjectContainer - 如果您的剪辑嵌套在其他几个剪辑中,您将拥有多个DisplayObjectContainer显示链中的实例。)

所以你的功能会是这样的:

function moverMc(nameOfMc:String):void
{
    var oClip:DisplayObject = theStage.getChildByName(nameOfMc);

    if((oClip != null) && (oClip is MovieClip))
    {
        // You need to cast oClip to MovieClip because getChildByName()
        // returns DisplayObject (the base type of MovieClip) but
        // not all DisplayObjects have a timeline.
        (oClip as MovieClip).play();
    }
}

theStage变量是一个全局变量(类型为Stage),您必须在启动时将其设置为Flash影片的舞台。有关如何执行此操作的更多详细信息,请参阅此SO question

在OP的评论之后

编辑我添加了一个不需要舞台的版本;这只是使用当前的DisplayObjectContainer来搜索子节点。 (Stage只是顶级显示对象容器,但所有可以嵌套显示对象的显示对象都是显示对象容器。)

function moverMc(parentOfMc:DisplayObject, nameOfMc:String):void
{
    var oClip:DisplayObject = parentOfMc.getChildByName(nameOfMc);

    if((oClip != null) && (oClip is MovieClip))
    {
        // You need to cast oClip to MovieClip because getChildByName()
        // returns DisplayObject (the base type of MovieClip) but
        // not all DisplayObjects have a timeline.
        (oClip as MovieClip).play();
    }
}

你会这样称呼这个版本:

nameOfMc = "circle_mc";
moverMc(this, nameOfMc);
当前上下文中的

this引用当前显示对象容器 - 这可以是舞台,也可以是舞台上的显示对象。您已在代码中使用this(可能没有意识到):localToGlobal调用真的是this.localToGlobal