首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是否可以创建一个函数来告诉按钮打开同名的影片剪辑

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

Stack Overflow用户
提问于 2015-02-06 01:13:19
回答 2查看 57关注 0票数 0

我是flash的actionscript方面的新手,

我正在制作一张地图,上面有20个弹出窗口(电影短片),国家是按钮,我刚刚被告知我需要再添加60个。

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

代码语言:javascript
复制
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
}

我在想,一定有一种比一遍又一遍地复制代码更简单的方法来做到这一点。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2015-02-06 02:07:48

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

代码语言:javascript
复制
var btnToMovieAssociation:Dictionary = new Dictionary();
btnToMovieAssociation[english_btn] = english_movie; // repeat this line for every btn/movie pair

现在你需要泛化一下你的点击处理程序。每个函数之间的关键区别(除了使一个特定的电影可见之外)是它们都使某些其他电影不可见。但实际上,这足以让以前可见的电影变得不可见。要执行此操作,请创建一个跟踪当前可见影片的变量。

代码语言:javascript
复制
var currentMovie:MovieClip = english_movie;

使用english_movie初始化变量对程序没有任何影响。你可以选择其他任何一部电影。如果这个变量被初始化,在下面的代码中就会变得更容易。

现在,您的函数可以有效地执行以下操作:

  • 使单击按钮的电影可见
  • 播放此电影
  • 使最后一部电影不可见

这是最酷的部分。您只需添加一个监听程序。在字典中查找所点击的内容,并考虑下一步要放映的电影。

代码语言:javascript
复制
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;来规避。
票数 0
EN

Stack Overflow用户

发布于 2015-02-06 22:53:16

我在其他地方发布了这个问题,并得到了以下回复

代码语言:javascript
复制
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;
}

效果很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28350045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档