我的代码:
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();”如果鼠标悬停在矩形上......
感谢您的帮助
答案 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。
编辑我添加了一个不需要舞台的版本;这只是使用当前的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
。