我是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
}
我认为必须有一种比一遍又一遍地复制代码更简单的方法。
非常感谢任何帮助。
答案 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;
}
哪个效果很好。