新键一个影片剪辑。在里面作出来一滴雨落下得效果。然后设置他的实例名称为“CC”然后返回到场景1。在之后就是从库里面把那个影片剪辑托到舞台上。在之后在第2。3贞上面插入关键贞。在第一贞动作里面写上 var i; i=1;
在第2贞上面写上
duplicateMovieClip(\"CC\m._y=random(450); i=i+1; if(i==50){i=10} 第3贞上面写上 gotoAndPlay(2);
2、下雪
将雪花拖入到主场景中,放置于舞台外,并封装为snow_mc, 在第一帧as编辑区里加入下面的AS语句: stop(); var i;
//产生60个小雪花
for (i=1; i<60; i++) { //产生新的雪花剪辑元件
snow_mc.duplicateMovieClip(\"snow\"+i+\"_mc\//新的雪花的X,Y坐标
eval(\"snow\"+i+\"_mc\")._x = random(800); eval(\"snow\"+i+\"_mc\")._y = random(560); //新的雪花的形变
scale = random(60)+50; //不同的透明度,产生层次感
eval(\"snow\"+i+\"_mc\")._alpha = scale; //不同的大小,产生层次感
eval(\"snow\"+i+\"_mc\")._xscale = scale; eval(\"snow\"+i+\"_mc\")._yscale = scale; //加入控制雪花的AS语句
snow(eval(\"snow\"+i+\"_mc\")); }
//这个函数是用来产生一个新的雪花 function createSnow() { //深度递加 i++;
//产生实例
snow_mc.duplicateMovieClip(\"snow\"+i+\"_mc\eval(\"snow\"+i+\"_mc\")._x = random(800); eval(\"snow\"+i+\"_mc\")._y = random(560); scale = random(60)+50;
eval(\"snow\"+i+\"_mc\")._alpha = scale; eval(\"snow\"+i+\"_mc\")._xscale = scale;
1
eval(\"snow\"+i+\"_mc\")._yscale = scale; snow(eval(\"snow\"+i+\"_mc\")); }
//加入控制雪花的AS语句的函数 function snow(snow_mc) {
snow_mc.onLoad = function() { //舞台大小
stage_x = 800; stage_y = 560;
//用来判断是否降落 this.moving = true; //风向和风力
windx = (_xmouse-stage_x/2)/100; };
//风向和风力随鼠标的移动而改变
snow_mc.onMouseMove = function() { windx = (_xmouse-stage_x/2)/100; updateAfterEvent(); };
snow_mc.onEnterFrame = function() { //判断moving
if (this.moving) {
//随机数用来产生摇摆效果 s = random(2); //雪花下落
this._y += 10; if (s == 0) { this._x += 5;
} else if (s == 1) { this._x -= 5; }
//加上风力
this._x += windx; //超出舞台就初始化
if (this._y>stage_y || this._x<0) { this._y = 0;
this._x = random(stage_x); }
//产生旋转效果
this._rotation = random(180); } } }
2
3、点播:
在场景中添加输入文本框,使变量名为x。
设置四个影片剪辑,实例名分别为:a、b、c、d。 帧-动作:
function play(name) {tellTarget(name) {gotoAndPlay(2); }}
在场景中添加按钮,按钮-动作:
on (release) {name=x; this.play(name); }
发布后,在文本框中输入实例名,按按钮就播放对应的影片剪辑。
4、画笔:
画笔一:帧-动作:
this.createEmptyMovieClip(\"canvas_mc\var isDrawing:Boolean = false; //
clear_btn.onRelease = function() { canvas_mc.clear(); }; //
var mouseListener:Object = new Object(); mouseListener.onMouseDown = function() { canvas_mc.lineStyle(5, 0xFF0000, 100); canvas_mc.moveTo(_xmouse, _ymouse); isDrawing = true; };
mouseListener.onMouseMove = function() { if (isDrawing) {
canvas_mc.lineTo(_xmouse, _ymouse); updateAfterEvent(); } };
mouseListener.onMouseUp = function() { isDrawing = false; };
Mouse.addListener(mouseListener); 建一个清除按钮,实例名:clear_btn。
—————————————————————————————————————————————— 画笔二: 帧-动作:
var empiremue = new ContextMenu();
3
//删除原始菜单状态!
empiremue.hideBuiltInItems(); //自定义菜单项目!
empiremue.customItems.push(new ContextMenuItem(\"鼠标写字\empiremue.customItems.push(new ContextMenuItem(\"清除字迹\
empiremue.customItems.push(new ContextMenuItem(\"退出程序\empiremue.customItems.push(new ContextMenuItem(\"退出写字\function h3() { fscommand(\"quit\"); }
function h4() {
Mouse.show();//显示鼠标 _root.clear();
//_root.pen=false;
_root.onMouseMove=function(){ updateAfterEvent();
pen._x = _root._xmouse+1200; pen._y = _root._ymouse+800; }}
function h1() { stop();
//_root.mc._visible=false;//影片不可见 var xx=Math.random()*0xFFFFFF; //Mouse.show();//显示鼠标
_root.createEmptyMovieClip(\"pen\pen.lineStyle(4, 0x0082FF); pen._x = 200; pen._y = 200; //浅兰色笔体
pen.beginFill(0x0082FF, 100); pen.lineTo(20, -8); pen.lineTo(65, -8); pen.lineTo(65, 8); pen.lineTo(20, 8); pen.lineTo(20, -8);
pen.beginFill(0x0082FF, 100); endFill(pen);
pen.beginFill(xx, 100); pen.lineStyle(4, xx) pen.lineTo(0, 0); pen.lineTo(20, 8); pen.lineTo(20, -8);
4
endFill(pen);
pen._rotation = -50; Mouse.hide();
//定义onMouseDown函数
//Math.random()*0xFFFFFF用代替可使每笔的颜色不同 _root.onMouseDown=function(){ //设定线条样式
_root.lineStyle(4,xx,100); //绘制直线;
_root.moveTo(_root._xmouse,_root._ymouse); //定义变量isdrawing,并赋值为真 isdrawing=true; }
_root.onMouseMove=function(){ updateAfterEvent();
pen._x = _root._xmouse; pen._y = _root._ymouse; //如果变量为真
if(isdrawing==true){ //绘制直线断
_root.lineTo(_root._xmouse,_root._ymouse); //刷新画面;
updateAfterEvent(); } }
_root.onMouseUp=function(){ //设定变量isdrawing的值为假 isdrawing=false; } }
function h2() { Mouse.hide(); _root.clear(); }
_root.menu = empiremue; 画笔三:用鼠标画线
onMouseDown=function () { lineStyle(2,0*000000,100) lineTo(_xmouse,_ymouse) }
5
onMouseMove = function() { if (a) {
lineStyle(2,0x000000,100);//指定线条的粗度为2,颜色为黑色,透明度为100;
lineTo(_xmouse, _ymouse); //画线至鼠标所在位置; }
updateAfterEvent(); //强制刷新;Flash 强制进行显示刷新工作。该语句不依赖于时间帧的触发。 };
onMouseDown = function() {
a = true; //鼠标按下,给a变量赋值true,即执行上面的if后面括号内的语句,开始画线;
moveTo(_xmouse, _ymouse);//重新定位开始点; };
onMouseUp = function() {
a = false; //鼠标松开,给a变量赋值false,不执行上面的if后面括号内的语句,停止画线; };
画笔四:
*两点间画直线 *画螺旋线
*画正方形、圆、椭圆 *抛物线
*正弦、余弦线
使用方法:加到帧中就可
// 画直线
// / x1, y1: 起点坐标 // x2, y2: 终点坐标 // k是层次
Movieclip.prototype.drawline = function(x1, y1, x2, y2, k) { this.linestyle(1); this.moveTo(x1, y1); this.lineTo(x2, y2); };
// 从(0,0)到(100,100)画一条线
_root.createEmptyMovieClip(\"mc\mc.drawline(0, 0, 100, 100); // 画螺旋线
// w、h为宽和高
// f控制线的长短,用弧度表示
Movieclip.prototype.drawhelix = function(w, h, f) {
6
for (var i = 0; i // 以(100,100)为中心画螺旋线 _root.createEmptyMovieClip(\"luo\with (luo) { drawhelix(5, 5, 13); _x += 100; _y += 100; } // 多功能函数,可画圆,椭圆,正多边形等 // n为边数 Movieclip.prototype.drawmany = function(w, h, n) { f = 2*Math.PI; for (var i = 0; i<=f/n*(n+1); i += f/n) { this.lineTo(x=Math.sin(i)*w, y=Math.cos(i)*h); this.linestyle(1); } }; // 画一正五边形 _root.createEmptyMovieClip(\"duobian\with (duobian) { drawmany(50, 50, 5); _x += 250; _y += 100; // 5为多边形的边数,6.3为2pai } // 画一椭圆 _root.createEmptyMovieClip(\"tuo\with (tuo) { drawmany(25, 50, 100); _x += 400; _y += 100; } // 圆 _root.createEmptyMovieClip(\"yuan\with (yuan) { drawmany(50, 50, 100); _x += 400; _y += 300; } // 抛物线 7 Movieclip.prototype.drawparabola = function(l, r, k) { for (var i = -l; i<=r; i += 1) { this.lineTo(x=i, y=k*i*i); this.linestyle(1); } }; // 调用 _root.createEmptyMovieClip(\"parabola\with (parabola) { drawparabola(50, 50, 0.05); _x += 200; _y += 200; // 顶点坐标 } // 正弦线,余弦类似 Movieclip.prototype.drawsin = function(n, k) { for (var i = 0; i<=90*n; i += 1) { this.lineTo(x=i, y=k*Math.sin(i*Math.PI/180)); this.linestyle(1); } }; _root.createEmptyMovieClip(\"sin\with (sin) { drawsin(4, 50); _x += 200; _y += 200; // 顶点坐标 } Movieclip.prototype.drawwave = function(w, h) { for (var i = 0; i<=6.3; i += 0.01) { this.lineTo(x=w/Math.cos(i), y=h*Math.sin(i)/Math.cos(i)); this.linestyle(1); } }; _root.createEmptyMovieClip(\"wave\with (wave) { drawwave(100, 100); _x += 200; _y += 200; // 顶点坐标 } 8 5、鼠标跟随时钟: 建一个实例名为ttmove的影片剪辑,其中有一个动态文本框(实例名:textclock)和一个背景层。把该影片剪辑放到一帧中。帧的动作代码: _root.onEnterFrame = function() { //startDrag(this.ttmove, true); ttmove._x += (_xmouse-ttmove._x)/5; ttmove._y += (_ymouse-ttmove._y)/5; //ttmove._x += _xmouse-ttmove._x; //ttmove._y += _ymouse-ttmove._y; myDate = new Date(); var seconds = myDate.getSeconds(); var minutes = myDate.getMinutes(); var hours = myDate.getHours(); var years = myDate.getFullYear(); var months = myDate.getMonth()+1; var dates = myDate.getDate(); //if (hours<12) { //ampm = \"AM\"; //} //else{ //ampm = \"PM\"; //} //while(hours >12){ //hours = hours - 12; //} if (hours<10) { hours = \"0\"+hours; } if (minutes<10) { minutes = \"0\"+minutes; } if (seconds<10) { seconds = \"0\"+seconds; } if (months<10) { months = \"0\"+months; } if (dates<10) { dates = \"0\"+dates; } myclock.hourHand._rotation = myDate.getHours()*30+myDate.getMinutes()/2; //hourhand2._rotation = myDate.getHours() * 15 + myDate.getMinutes() / 9 4; myclock.minuteHand._rotation = myDate.getMinutes()*6+myDate.getSeconds()/10; myclock.secondHand._rotation = myDate.getSeconds()*6; //monthhand._rotation=myDate.getDate()*12; //weekhand._rotation=myDate.getDay()*51; //now = new Date(); dagen = new Array(\"星期天\星期一\星期二\星期三\星期四\星期五\星期六\"); day = dagen[myDate.getDay()]; ttmove.textclock.text = years+\"-\"+months+\"-\"+dates+\" \"+day+\" \"+hours+\":\"+minutes+\":\"+seconds; }; stop(); var bgcolorp = Math.round(Math.random()*13); _root.bgcolor.gotoAndStop(bgcolorp); var mouseListener:Object = new Object(); mouseListener.onMouseWheel = function(delta:Number) { trace(delta); myclock._xscale += delta*3; myclock._yscale = myclock._xscale; if (myclock._yscale<=0) { mycloce._yscale = 1; } if (myclock._xscale<=0) { myclock._xscale = 1; } }; Mouse.addListener(mouseListener); 6、影片剪辑跟随鼠标自动缩放: 建两个影片剪辑,实例名分别是:1、3。 建两个帧,第一帧-动作: setProperty(\"1\setProperty(\"1\ setProperty(\"1\setProperty(\"1\setProperty(\"3\ setProperty(\"3\setProperty(\"3\ setProperty(\"3\ 10 第二帧-动作:gotoAndPlay(1); 7、影片剪辑跟着鼠标转动:建一个影片剪辑,影片剪辑动作: //This one chould be pretty self explanatory. //Basically it uses basic trigonometry to figure out the angle //at which the clip should be rotated //Questions? patrickmineault@sympatico.ca onClipEvent(load){ X = this._x; Y = this._y; } onClipEvent(mouseMove){ Xm = _root._xmouse; Ym = _root._ymouse; Xdiff = Xm - X; Ydiff = -(Ym - Y); radAngle = Math.atan(Ydiff/Xdiff); if (Xdiff < 0){ corrFactor = 270; } else{ corrFactor = 90; } this._rotation = -radAngle*360/(2*Math.PI) + corrFactor; updateAfterEvent(); } 8、鼠标拖拽与旋转 在网上看到某个游戏既要拖拽mc又要旋转mc,拖拽用鼠标事件实现,而旋转需要用shift+鼠标click事件。总觉得太麻烦了。故而希望自己能找到一种只用鼠标就能同时实现拖拽与旋转功能的方法。 结果发现MOUSE_DOWN+MOUSE_UP竟然相当于一次CLICK事件。即每次释放鼠标左键,停止拖拽时,mc会旋转一次,而这个显然不是预期的效果。 于是,开始明白了,那个程序员为什么要添加shift键的侦听了。 可是,不用shift键就不能实现这种功能吗?我开始考虑如何区分MOUSE_DOWN+MOUSE_UP与CLICK.。 方法一:设置时间间隔。时间不太好把握,pass掉。 方法二:用鼠标的相对位置。倘若mc未移动则视为click事件。正解! 11 package{ import flash.display .*; import flash.geom .Point; import flash.events.*; public class main extends Sprite{ private var mc:MC; private var clickOffset:Point; private var mouseLoc:Point; public function main(){ mc=new MC(); addChild(mc); mc.x=200; mc.y=200; mc.addEventListener(MouseEvent.CLICK ,rot); mc.addEventListener(MouseEvent.MOUSE_DOWN,startdrag); mc.addEventListener(Event.ENTER_FRAME. ,drag); stage.addEventListener(MouseEvent.MOUSE_UP,stopdrag); } private function startdrag(e:MouseEvent ){ mouseLoc=new Point(e.stageX,e.stageY); clickOffset=new Point(e.stageX-mc.x,e.stageY-mc.y); } private function drag(e:Event){ if(clickOffset==null) return; mc.x=mouseX-clickOffset.x; mc.y=mouseY-clickOffset.y; } private function stopdrag(e:MouseEvent ){ clickOffset=null; } private function rot(e:MouseEvent){ if(!mouseLoc.equals(new Point(e.stageX,e.stageY)))return; mc.rotation+=30; } } } 12 因篇幅问题不能全部显示,请点此查看更多更全内容