水蓝闪族实例课堂实录1
本群的课程包括AS基础,实例两部分,希望达到帮助初学者学习AS的目的,同样希望成为各位闪客们交流的平台
第一讲:A3菜单 主讲:爱奶茶の猫 A3菜单实例
制作步骤 1、制作各个分单元动画 2、编写AS程序 3、测试程序
制作各分单元动画 该动画主场景为760*75,背景自定~ 首先,在CTRL+F8,创建新的影片剪辑,命名为BG,将其拖入场景中,将影片剪辑命名为BG; 然后分别常见主菜单动画: CTRL+F8创建影片剪辑,设置如下:
为菜单设计动画(变大效果) 根据需要设计多个菜单影片剪辑 设计竖线(方法同上,具体参见源文件) 设计按钮背景
程序设计
onClipEvent (load) { //参数设置 m_length = 110; // 最大长度 n_length = 88; // 最小长度 def_length = 90; // 默认长度 num_of_menu = 8; // 菜单数量 system_on = false; //鼠标指向状态标识 accel = 10; slow = 1.30; //弹性系数
myLine = new Array(); myMenu = new Array(); but = new Array(); //生成菜单数组,和线数组
//生成菜单 //将库中的菜单加载入场景 //载入竖线 for (i=1; i<=num_of_menu+1; i++) { this.attachMovie("line", "line"+i, i*100); //将库中的Line载入场景 myLine[i] = eval(this["line"+i]); //将引入文件数组化 myLine[i]._y = 0; myLine[i]._x = (i-1)*def_length; //定义位置 myLine[i].active = false; //定义激活状态 myLine[i].targetPos = 0; myLine[i].vx=0; if (i<=num_of_menu) { myLine[i].menutitle.title = "menu"+i; //生成主菜单热区 myLine[i].attachMovie("bt", "bt"+i, 2); //引入场景 } } //载入菜单 for(i=1;i<=num_of_menu;i++) { this.attachMovie("image"+i, "image"+i, i*10); //将库中的m载入场景 myMenu[i]=eval(this["image"+i]); myMenu[i]._y=0; myMenu[i]._x=(i-1)*def_length+5; this.attachMovie("bm"+i,"bm"+i,112*i); but[i]=eval(this["bm"+i]); but[i]._x=0; but[i]._y=35; }
function targetCheck() { if (system_on) //鼠标若在按钮上 { temp = 30; } else { temp = 25; } //判断鼠标坐标 if (this._ymouse>0 && this._ymouse0 && this._xmouse<720) //检测鼠标是否在6个按钮之内 { if (this._ymouse<30) { system_on = true; //设置状态 for (i=1; i<=num_of_menu; i++) //检查指向的按钮 { if (this._xmouse>myLine[i]._x && this._xmouse{ this["line"+(i+1)].active = true; } else { this["line"+(i+1)].active = false; } } } } else { system_on = false; } }
function lineMove() //边线移动 { if (system_on) { for (i=2; i<=num_of_menu; i++) //去处首尾边线 { if (myLine[i].active) { myLine[i].targetPos = this["line"+(i-1)].targetPos+m_length; } else { myLine[i].targetPos = this["line"+(i-1)].targetPos+n_length; } myLine[i].vx=(myLine[i].vx+(myLine[i].targetPos-myLine[i]._x)/accel)/slow; //弹性公式~ myLine[i]._x += myLine[i].vx; } } else { for (i=2; i<=num_of_menu; i++) { myLine[i].targetPos = this["line"+(i-1)].targetPos+def_length; myLine[i].vx (myLine[i].vx+(myLine[i].targetPos-myLine[i]._x)/accel)/slow; myLine[i]._x += myLine[i].vx; } } } function menuMove() {
for (i=1; i<=num_of_menu; i++) { if (system_on && myLine[i+1].active) { if (myMenu[i]._currentFrame == 1) { for(j=1;j<=num_of_menu;j++) but[j].gotoAndStop(1); myMenu[i].gotoAndPlay(2); but[i].gotoAndPlay(2); } } else { myMenu[i].gotoAndStop(1); } myMenu[i]._x = myLine[i]._x+5; //使菜单和线一起做弹性运动 } } } onClipEvent (enterFrame) { targetCheck(); lineMove(); menuMove(); }
说明: 1、主菜单变大的大小是有限制的! 在没有变化前各个菜单平均分配宽度:90*6=540 变化后各个菜单不平均分配宽度:变大菜单 110 其余 88 88*5+110=550 2者基本相同 2、程序中定义了许多变量并不市对象自带的!而是我自定义的!请大家分清楚! 3、代码结构 targetCheck(); 判断当前鼠标所处位置!并根据位置设置相应的代码 lineMove(); 边线移动处理程序 menuMove(); 菜单移动处理程序
|