先看我做好的:
新开窗口效果比较好 源文件 有个失误,减主菜单的时候名字忘了减了。 先讲讲我的思路,主要是利用几个变量: menuNum ---主目录数 menuName_X ---第X个目录名 menu_X_childNum ---第X个目录的菜单数 menu_X_childName_Y ---第X个目录的第Y个菜单的名子 botton_X_Y_ulr ---第X个目录的第Y个菜单的连接地址 利用这几个变量循环出菜单。主要工作在层attmenu和attchild上。 edit层就是改变和储存这几个变量。 目前还在研究XML,想利用XML来储存这些数据。希望高手指点。 以下是FLA种的源程序加上我的注释,班门弄斧一下。 Layer:attmenu frame1:空,用于读取外部数据。 frame2:
for(i=1;i<menuNum+1;i++){ //取得主目录数目(menuNum),并循环复制按钮 attachMovie("unseeb","unseeb_"+i+"a",100+i) //复制不可见按钮用于主目录按钮的动作。 attachMovie("bover","menu_"+i,i); //复制动画按钮。 attachMovie("atext","atext"+i,200+i);//复制主目录上的按钮名称。 this["menu_"+i]._x=60+100*(i-1); //设置以上三个按钮载主场景的位置。 this["menu_"+i]._y=20; this["unseeb_"+i+"a"]._x=60+100*(i-1); this["unseeb_"+i+"a"]._y=20; _root["atext"+i].name=eval("menuName_" + i); _root["atext"+i]._x=30+100*(i-1); _root["atext"+i]._y=12; }
Layer:attchild frame1-2:空,这两帧用于复制主目录 frame3:
stop(); //停止影片 for(i=1;i<=menuNum;i++){ //以主目录数目做循环 childNum=eval("menu_" + i +"_childNum"); //分别获得每个主目录的菜单数目 for(j=1;j<childNum+1;j++){ //以该主目录的菜单数目做循环 attachMovie("botton","botton_"+i+"_"+j,j+(i+2)*100); //复制菜单按钮 attachMovie("atext","atext_"+i+"_"+j,j+(i+102)*100); //复制菜单名称 this["botton_"+i+"_"+j]._x=60+100*(i-1); //设置以上两种按钮的属性(位置、不可见) this["botton_"+i+"_"+j]._y=20+j*23; this["botton_"+i+"_"+j]._visible=false; this["atext_"+i+"_"+j]._x=20+100*(i-1); this["atext_"+i+"_"+j]._y=12+j*23; this["atext_"+i+"_"+j]._visible=false; this["atext_"+i+"_"+j].name=eval("menu_"+i+"_childName_"+j); //取得菜单名称并赋值给MC(atext)中的动态文本。 } //下一个子菜单 } //下一个主目录 Layer:getnum:用于读取外部变量并将其转化为数值型。
Layer:edit:用于编辑各个目录以及菜单 MC: edit (左下角):
onClipEvent(enterFrame){ //监测不可见按钮是否在第2帧(是否处于激活状态)为可见 this._visible = false; for (i=1;i<=_root.menuNum;i++){ if (_root["unseeb_"+i+"a"]._currentframe == 2){ this._visible = true; } } } edit内的按钮:
on (release) { for (i=1; i<=_root.menuNum; i++) { if (_root["unseeb_"+i+"a"]._currentframe == 2) { _root.editNum = i; } } //监测哪一个按钮处于激活状态 _root.editbg._visible = true; //激活编辑界面 for(j=1;j<=eval("_root.menu_"+_root.editNum+"_childNum");j++){ //告诉编辑界面该目录的子菜单数目 eval("_root.editbg.intext_"+j)._visible=true; //告诉editbg循环出相应数目的input框 eval("_root.editbg.intext_"+j+"_url")._visible=true; } for(k=eval("_root.menu_"+_root.editNum+"_childNum")+1;k<=20;k++){ eval("_root.editbg.intext_"+k)._visible=false; eval("_root.editbg.intext_"+k+"_url")._visible=false; } for(x=1;x<=20;x++){ //读取子菜单默认值 eval("_root.editbg.intext_"+x).text=eval("_root.menu_"+_root.editNum+"_childName_"+x); eval("_root.editbg.intext_"+x+"_url").text=eval("_root.botton_"+_root.editNum+"_"+x+"_url"); } _root.editbg.menuName.text=eval("_root.menuName_"+_root.editNum);//读取主目录默认值 }
editbg (右):
onClipEvent(load){ this._visible=false; }
editbg内: layer1:背景 layer2:循环20个文本框MC(intext),并给他们赋予名字以及位置。
for(j=1;j<=20;j++){ attachMovie("intext","intext_"+j,10000+j); attachMovie("intext","intext_"+j+"_url",20000+j); this["intext_"+j]._x=-150; this["intext_"+j]._y=-225+23*(j-1); this["intext_"+j+"_url"]._x=-40; this["intext_"+j+"_url"]._y=-225+23*(j-1); for(k=0;k<1;k++){ this["intext_"+j]._visible=false; this["intext_"+j+"_url"]._visible=false; } }
ok按钮:赋值给各个变量 on(release){ _root["menuName_"+_root.editNum] = this.menuName.text for(i=1;i<=eval("_root.menu_"+_root.editNum+"_childNum");i++){ eval("_root.menu_"+_root.editNum+"_childName_"+i) = this["intext_"+i].text; eval("_root.botton_"+_root.editNum+"_"+i+"_url") =this["intext_"+i+"_url"].text; } _root.gotoAndPlay(1); _root.editbg._visible = false; } button: +(左上):每单击一次主目录数目+1
on(release){ _root.menuNum+=1; if (_root.menuNum>8) { _root.menuNum=8; } _root.gotoAndPlay(1); }
_(左上):每单击一次主目录数目-1 on(release){ if (menuNum!=1){ _root["unseeb_"+menuNum+"a"].unloadMovie(); _root["menu_"+menuNum].unloadMovie(); _root["atext_"+menuNum].unloadMovie(); for(i=1;i<=eval("menu_"+menuNum+"_childNum");i++){ _root["botton_"+menuNum+"_"+i].unloadMovie(); } } _root.menuNum -=1; if (_root.menuNum<=0 ){ _root.menuNum=1; } _root.gotoAndPlay(1); } +(左下):每单击一次子目录数目+1
on(release){ for (i=1;i<=menuNum;i++){ if(_root["unseeb_"+i+"a"]._currentframe==2){ eval("menu_"+i+"_childNum") +=1; if (eval("menu_"+i+"_childNum")>=20){eval("menu_"+i+"_childNum")=20;} j=eval("menu_"+i+"_childNum"); attachMovie("botton","botton_"+i+"_"+j,j+(i+2)*100); attachMovie("atext","atext_"+i+"_"+j,j+(i+102)*100); this["botton_"+i+"_"+j]._x=60+100*(i-1); this["botton_"+i+"_"+j]._y=20+j*23; } } }
—(左下):每单击一次子目录数目-1
on(release){ for (i=1;i<=menuNum;i++){ if(_root["unseeb_"+i+"a"]._currentframe==2){ del = eval("menu_"+i+"_childNum"); if (del < 0){ del = 0 ; } _root["botton_"+i+"_"+del].unloadMovie(); _root["atext_"+i+"_"+del].unloadMovie(); eval("menu_"+i+"_childNum") -=1; if (eval("menu_"+i+"_childNum") < 0 ){ eval("menu_"+i+"_childNum") =0 ; } } } }
library : button:点击获得链接路径(变量button_X_Y)(X代表第几个目录,Y代表第几个菜单)
on(rollOver){ attachMovie("bover","bover",1); attachMovie("brelease","brelease",2) } on(rollOut){ this.bover.unloadMovie(); } on(release){ this.brelease.play(); url = this._name+"_url"; getURL(_root[url],"_blank"); } on(releaseOutside){ this.bover.unloadMovie(); }
unseeb:控制激活状态的该按钮只能有一个
on(release){ name = this._name; which = name.slice(7,-1); howmuch = _root["menu_"+which+"_childNum"]; for(j=1;j<=howmuch;j++){ _root["atext_" + which +"_"+j]._visible = true; _root["botton_"+which +"_"+j]._visible = true; } for(i=1;i<=_root.menuNum;i++){ if (i==which){ continue; } for(j=1;j<=_root["menu_"+i+"_childNum"];j++){ _root["botton_"+i+"_"+j]._visible = false; _root["atext_"+i+"_"+j]._visible = false; } _root["unseeb_"+i+"a"].gotoAndStop(1); } gotoAndStop(2); }
出处:蓝色理想
责任编辑:无意
◎进入论坛Flash专栏版块参加讨论
|