我是flash的actionscript方面的新手,
我正在制作一张地图,上面有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
}我在想,一定有一种比一遍又一遍地复制代码更简单的方法来做到这一点。
任何帮助都将不胜感激。
发布于 2015-02-06 02:07:48
下面是如何使用代码简化整个过程:每个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;来规避。发布于 2015-02-06 22:53:16
我在其他地方发布了这个问题,并得到了以下回复
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;
}效果很好。
https://stackoverflow.com/questions/28350045
复制相似问题