问候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的初学者。
答案 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处于点击状态。