AS3编辑event.target后点击执行gotoAndPlay(“abc”);

时间:2016-06-20 12:42:23

标签: actionscript-3 flash-cs5

问候stackoverflow成员,

我有3个嵌套在动画片段中的动画影片剪辑。我要做的是获取实例的名称,并在应用gotoAndPlay时编辑它。我可以得到这个名字,但是当我尝试编辑它时,我得到了错误:

符号'按钮MC',图层'动作',第1帧,第30行1061:通过带有静态类型String的引用调用可能未定义的方法gotoAndPlay。

到目前为止,这是我的代码:

   [Bindable] var targetName:String;

var _userInput:String = new String();
_userInput = targetName;

//array for buttons
var btnArray:Array = [INS_Btn1, INS_Btn2, INS_Btn3];

//add eventlistiners
for(var i:uint=0; i<btnArray.length; i++) {
    btnArray[i].addEventListener(MouseEvent.ROLL_OVER, bRollover);
    btnArray[i].addEventListener(MouseEvent.ROLL_OUT, bOut);
    btnArray[i].addEventListener(MouseEvent.CLICK, bClick);
    btnArray[i].buttonMode=true;
}

//btn over state
function bRollover(event:MouseEvent):void{
    event.target.gotoAndPlay("Over");
}
//btn out state
function bOut(event:MouseEvent):void{
    event.target.gotoAndPlay("Out");
}
//btn click state
function bClick(event:MouseEvent):void{
    targetName = event.target +("_ani")
    targetName.gotoAndPlay("Active");
}

我想要的是点击的MC应该去播放其他MC的动画。我应该提一下,我是AS3的初学者。

2 个答案:

答案 0 :(得分:1)

targetName是一个字符串,当然你不能在一个字符串上gotoAndPlay :)除此之外,event.target将返回你点击的对象而不是它的名字。如果你不对这段代码做任何特别的事情,那么targetName就不需要是可绑定的。

所以我假设您想要在单击INS_Btn1按钮时播放实例名称为INS_Btn1_ani的动画片段?首先,确保您的按钮具有名称属性设置(为了使其更容易,将名称设置为&#34; INS_Btn1&#34;,&#34; INS_Btn2&#34;等等。

INS_Btn1.name = "INS_Btn1";

然后你会这样做:

function bClick(event:MouseEvent):void
{
    targetName = event.target.name + "_ani"; // this will become INS_Btn1 + _ani = INS_Btn1_ani

    // Now you need to let the movieclip with the name "INS_Btn1_ani" play
    this[targetName].gotoAndPlay("Active");
}

答案 1 :(得分:0)

因此,在理解了Philarmon的答案后,我解决了这个问题。如果有人在这里遇到相同/类似的问题,那么我所做的就是让它发挥作用:

var targetName:String;
var _userInput:String = new String();
_userInput = targetName;

//array for buttons MCs
var btnArray:Array = [INS_btn1, INS_btn2];
var aniArray:Array = [INS_btn1_ani, INS_btn2_ani];

//add eventlistiners
for(var i:uint=0; i<btnArray.length; i++) {
btnArray[i].addEventListener(MouseEvent.ROLL_OVER, bRollover);
btnArray[i].addEventListener(MouseEvent.ROLL_OUT, bOut);
btnArray[i].addEventListener(MouseEvent.CLICK, bClick);
btnArray[i].buttonMode=true;
} 

//btn over state
function bRollover(event:MouseEvent):void{
targetName = event.currentTarget.name + "_ani";
this[targetName].gotoAndPlay("Over");

}
//btn out state
function bOut(event:MouseEvent):void{
targetName = event.currentTarget.name + "_ani";
this[targetName].gotoAndPlay("Out");
}
//on clicked
function bClick(event:MouseEvent):void{
//add listeners for unclicked
for (var i:uint=0;i<btnArray.length; i++){
    btnArray[i].addEventListener(MouseEvent.ROLL_OUT, bOut);
    btnArray[i].addEventListener(MouseEvent.ROLL_OVER, bRollover);
    //stopping animation
    aniArray[i].gotoAndStop("Out");
}

//remove Eventlistener when clicked
event.target.removeEventListener(MouseEvent.ROLL_OUT, bOut);
event.target.removeEventListener(MouseEvent.ROLL_OVER, bRollover);

targetName = event.currentTarget.name + "_ani";
this[targetName].gotoAndStop("Active");
}

正如你所看到的,我已经添加了一个&#34;粘性&#34;用于保持mc处于点击状态。