我可以创建一个函数来告诉按钮打开同名的影片剪辑

时间:2015-02-05 17:13:19

标签: actionscript-3 flash

我是flash的动作脚本的新手,

我正在制作一张地图,上面有20个弹出窗口(动画片段)和国家/地区按钮,我刚刚被告知需要再添加60个。

以下是我一直使用的代码示例

english_movie.visible=french_movie.visible=turkish_movie.visible=false

english_btn.addEventListener(MouseEvent.CLICK, englishButtonClick);
french_btn.addEventListener(MouseEvent.CLICK, frenchButtonClick);
turkish_btn.addEventListener(MouseEvent.CLICK, turkishButtonClick)

function englishButtonClick(event:MouseEvent):void {
english_movie.visible=true;
english_movie.play();
french_movie.visible=turkish_movie.visible=false
} 

function frenchButtonClick(event:MouseEvent):void {
french_movie.visible=true;
french_movie.play();
english_movie.visible=turkish_movie.visible=false
}

function turkishButtonClick(event:MouseEvent):void {
turkish_movie.visible=true;
turkish_movie.play();
english_movie.visible=french_movie.visible=false
}

我认为必须有一种比一遍又一遍地复制代码更简单的方法。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

以下是如何使用代码简化整个事情:每个btn对象都是 与一个电影对象有关。这可以通过字典来实现。

var btnToMovieAssociation:Dictionary = new Dictionary();
btnToMovieAssociation[english_btn] = english_movie; // repeat this line for every btn/movie pair

现在你必须推广你的点击处理程序。关键的区别 每个功能之间(除了使某个电影可见) 是他们都让某些其他电影看不见。但实际上, 仅仅使之前可见的电影不可见是足够的。 为此,请创建一个跟踪当前可见的变量 电影。

var currentMovie:MovieClip = english_movie;

使用english_movie初始化变量对此没有影响 程序。你可以选择任何其他电影。它会制造东西 如果初始化此变量,则在以下代码中更容易。

现在你的功能有效地做到了这一点:

  • 制作点击按钮的电影
  • 播放这部电影
  • 让最后一部电影不可见

这里很酷。您只需添加一个侦听器。查看是否有什么东西 是在点击的东西的字典中,并考虑到 你想要展示的电影。

addEventListener(MouseEvent.CLICK, buttonClick);

function buttonClick(event:MouseEvent):void 
{
     var movie:MovieClip = btnToMovieAssociation[event.target]
     if (movie == null)
           return; // nothing in the dictionary, it wasn't a button that was clicked.
     movie.visible=true;
     movie.play();
     currentMovie.visible = false;
     currentMovie = movie;
}

此解决方案存在问题:

  • 你还需要申报每一对,这仍然是乏味的,容易出错。 (你必须输入两次名字)
  • 如果您的按钮由多个对象组成,event.target可能指向它们而不是整个按钮。但只有 字典中的btns而不是它们各自的部分, 在字典中找不到任何东西。这可以通过以下方式来规避 在每个btn上设置mouseChildren = false;

答案 1 :(得分:0)

我在这里发布了这个问题并得到了这个回复

var tl:MovieClip=this;
var mc:MovieClip;
var i:int;
var buttonA:Array=[english_btn,french_btn,turkish_btn];

for(i=0;i<buttonA.length;i++){
buttonA[i].addEventListener(MouseEvent.CLICK,buttonF);
tl[buttonA[i].name.split("_")[0]+"_movie"].visible = false;
}

function buttonF(e:MouseEvent):void{
for(i=0;i<buttonA.length;i++){
tl[buttonA[i].name.split("_")[0]+"_movie"].visible = false;
}
tl[e.currentTarget.name.split("_")[0]+"_movie"].visible=true;
}

哪个效果很好。