




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FLASH小技巧,动态修改影片的帧频在AS3中,你可以使用Stage类动态的修改影片的帧频。Stage类(flash.display.Stage)的stage对象是所有的sprite和MovieClip以及其他在安全沙箱里的所有元件的舞台。stage对象的帧频可以是0.01到1000之间的任何一个数。要修改帧频,使用下面的代码:/ 将帧频修改到12帧每秒(FPS) stage.frameRate = 12;FLASH无手指按钮的制作只需要在第一帧加上:buttonname.useHandCursor=0buttonname是你按钮的实例名(不是库里面的名字,属性面板里面的实例名)几个需要掌握的AS1、var a = Math.abs(-7); / 求绝对值(这里是求-7的)2、function myFunction(myNum) var newNum = myNum+5;return newNum;trace(myFunction(8);/定义 调用并输出函数值3、多数情况下,需要用到鼠标光标在主场景中的位置,所以可以使用_root._xmouse和_root._ymouse表示。onClipEvent (enterFrame) _x = _root._xmouse;_y = _root._ymouse;/让影片剪辑和鼠标保持相同坐标4、将矩形影片剪辑作为遮罩图形在矩形影片剪辑的动作面板中添加如下ActionScript:onClipEvent (load) xs = _width;ys = _height;onClipEvent (enterFrame) _xscale = 100*(_root._xmouse-_x)/(xs/2);_yscale = 100*(_root._ymouse-_y)/(ys/2);在load事件中,用变量xs和ys取得影片剪辑初始状态下的宽度和高度值。在enterFrame事件中,计算鼠标位置与矩形影片剪辑中心 的距离,算出它与矩形宽度和高度值的比值,然后作为_xscale和_yscale的值。该动画实现移动鼠标位置以改变遮罩效果5、Array对象(动作面板的“对象”/“核心”目录)即数组,它用来记录成组的相关或相似变量。创建一个空的数组:myArray = new Array();如下所示的ActionScript创建一个确定值的数组并在输出窗口中显示每个元素的值:weekDay = new Array(SUN, MON, TUE, WED, TUR, FRI, SAT);for (var i = 0; i7; i+) trace(weekDay);数组中还可以嵌套数组,即构成多维数组,如下所示:polyArray = new Array();for (var i = 0; i3; i+) polyArray = new Array(i*3+1, i*3+2, i*3+3, i*3+4);trace(polyArray0+ +polyArray1+ +polyArray2+ +polyArray3);输出窗口中将显示:1 2 3 44 5 6 77 8 9 10-判断本机Flash播放器版本并进行下载ss=System.capabilities.version;if(substring(ss,5,1)7)getURL(/cn;,_blank);/ target=_blank /cn,_blank);/那个7就是版本号用奇偶判断来做一个按钮的声音开关第一帧加入(第一帧空帧):t=0 /给t赋初值第二帧加入:stop(); /停止在第二帧ms=new Sound /新建一个声音对象msms.attachSound(sound) /空声音对象从库中调用连接名为sound的声音ms.start() /ms开始播放ms.onSoundComplete=function () /当ms这个声音播放完后执行以下ASms.start /重复播放ms第二帧上面的控制按钮加入on (release) /当鼠标松开的时候执行下面ASt=t+1 /t的值等于本身的值加1if (t%2=1) /如果T取摸2等于1ms.stop() /则ms停止播放b=ms.position/1000 /b的值等于现在ms声音停止的位置 else /否则ms.start(b) /ms从刚刚停止的地方(b)开始播放实现倒放(可以自行联想作出许多不间断缩放效果,如动态按钮等,曾经我写过一篇这样的教程):给放在场景中比如有40桢的MC添加如下语句onClipEvnt(load)gotoAndStop(40);/影片载入时就跳转到40桢并停止onClipEvent(enterFrame)prevFrame();/不断的播放前一桢,-一些简单的AS和一些程序思路,掌握最好:1.复制MC并随机设定子MC的相关属性:duplicateMovieClip(mc,mc+i,10+i);setProperty(mc+i,_x,random(400) );/x坐标setProperty(mc+i,_y,random(300) );/y坐标setProperty(mc+i,_alpha,random(100) );/透明度属性i+;if(i200)/设定复制的个数;i=1;-2.文字的逐个出现(打字效果)Frame1: text=引号内是要出现的字;ll = text.length;/ 表示text文本的字符数;i = 1;/用于控制输出的变量;Frame4: if (ill+1) text1 = text.substring(0,i);/从第0个字符开始抽取显示,抽取长度为i;i+;Frame5:gotoAndPlay(4);-3.冒泡法排序:for(i;in;i+) /外层循环;for(j=n;j=i+1;j-)/内层循环;if(ajaj-1)temp=aj;aj=aj-1;aj-1=temp;/交换位置;-4.插入法排序(算法复杂性比冒泡法要小):for(i=2;i=n;i+)j=i;if(ajaj-1)temp=aj;aj=aj-1;aj-1=temp;j-; -5.一个按钮控制声音的播放与停止: on(release)a=a+1;if(a%2=1)/奇偶判断;mysound.stop();_root.b=int(ji.position/1000);/记录下停止时播放的位置;else mysound.start(_root.b);/从上一次停止的位置开始继续播放; -6.MC以恒定速度旋转 onClipEvent (enterFrame) _rotation +=6;/设定每次的旋转角度值; -和WEB结合设计中用层来遮住FLASH1.在flash的parameters里加入 2. 遮住场景以外的部分Stage.scaleMode = exactFit;-判断输入是否为数字的函数: on(release) if(Number(pass)=NaN)/判断输入是否为数字 pass=; -检查E-MAIL的函数: function checkemail(email) var str = new String(email); var arr_email = str.split(); if (arr_email.length != 2) | (arr_email1.indexOf(.)(second*1000) option(); function go() /加入效果 jpg2._y = jpg2._y+77; jpg2._alpha = jpg2._alpha-15; fscommand(fullscreen, true); createEmptyMovieClip(jpg1, 1); createEmptyMovieClip(jpg2, 2); jpg1.loadMovie(1.jpg); jpg2.loadMovie(2.jpg); i = 0; while (i=100) showTime(0.1, go); i = i+20; -FLASH中的保留小数的函 int(你的数*10)/10; 这样是保留一位 乘上100就是两位。以此类推 -FLASH脚本实现关机 flash5: fscommand (exec,rundll+chr(9)+user.exe,exitwindows); - 鼠标双击问题! lsn_DbClick = new Object(); lsn_key = new Object(); lsn_DbClick.onMouseDown = function() clickTime = getTimer(); if (clickTime-lastClickTime=300) trace(双击了鼠标); lastClickTime = clickTime; ; Mouse.addListener(lsn_DbClick); time = getTimer()-down_time; if (time300) /双击后的代码部分 down_time = getTimer(); 怎样在从另一个swf中获取变量 loadMovieNum(vars.swf, 1POST); _root.onEnterFrame = function() trace(_level1.myvab); ; /当加载完毕后,输出就有值了. 鼠标右键及滚轮的代码 if Key.isDown(2),(左键的代码是1) 左键:Key.isToggled(1) 右键:Key.isToggled(2) 滚轮:Key.isToggled(4) 滚轮1:Key.isToggled(4) PC机上用 滚轮2:Key.isToggled(3) MAC机上用 未知:Key.isToggled(3) this.onEnterFrame = function() if (Key.isDown(2) trace(asdfjsdjkf); - 实现TAB功能 获得焦点 使用Selection.setfocus()函数 举个例子: 例如你在主影片中有N个文本框,变量分别为text1,text2.你想使影片一播放就把焦点落到第一个 文本框你就在第一FRAME 加AS如下: Selection.setfocus(_root.text1); 我们可以举一反三 实现TAB功能 二 把这个N个文本框做组成一个数组 numarray=new array(_root.text1,_root.text2,._root.textn); 首先获得鼠标焦点 x=Selection.getfocus();/* x 获得鼠标焦点的一个字符串 for(i=0;i=n;i+) if(numarray=x) num=i; /*获得当前焦点在数组中的位置 然后编写TAB键功能 on (keyPress ) if (num=n)num=0; elsenum+; Selection.setfocus(numarraynum); 按钮能像window那样用Tab键来转换选择 用button.onKillFoucus -*两点间画直线 *画螺旋线 *画正方形、圆、椭圆 *抛物线 *正弦、余弦线 使用方法:加到帧中就可 / 画直线 / / x1, y1: 起点坐标 / x2, y2: 终点坐标 / k是层次 Mtotype.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, 10); mc.drawline(0, 0, 100, 100); / 画螺旋线 / w、h为宽和高 / f控制线的长短,用弧度表示 Mtotype.drawhelix = function(w, h, f) for (var i = 0; if; i += 0.05) this.lineTo(x=Math.sin(i)*i*w, y=Math.cos(i)*i*h); this.linestyle(1); ; / 以(100,100)为中心画螺旋线 _root.createEmptyMovieClip(luo, 1); with (luo) drawhelix(5, 5, 13); _x += 100; _y += 100; / 多功能函数,可画圆,椭圆,正多边形等 / n为边数 Mtotype.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, 2); with (duobian) drawmany(50, 50, 5); _x += 250; _y += 100; / 5为多边形的边数,6.3为2pai / 画一椭圆 _root.createEmptyMovieClip(tuo, 3); with (tuo) drawmany(25, 50, 100); _x += 400; _y += 100; / 圆 _root.createEmptyMovieClip(yuan, 4); with (yuan) drawmany(50, 50, 100); _x += 400; _y += 300; / 抛物线 Mtotype.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, 100); with (parabola) drawparabola(50, 50, 0.05); _x += 200; _y += 200; / 顶点坐标 / 正弦线,余弦类似 Mtotype.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, 101); with (sin) drawsin(4, 50); _x += 200; _y += 200; / 顶点坐标 Mtotype.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, 105); with (wave) drawwave(100, 100); _x += 200; _y += 200; / 顶点坐标 -一个动态文本设置alpha函数。 function setAlpha(obj,alpha) var rgb=0x+(255*(100-alpha)/100).toString(16); rgb=rgb16|rgb随机命名库中所有元件,然后看看库里的东西。;-)enjoy! 获得外部影片的宽度 作者:WiZiM 类型:转载 来源:WiZiM_root.createEmptyMovieClip(mc, _root.getNextHighestDepth(); mc.loadMovie(logo.gif); trace(mc._width); 这样得到的结果虽然是0,这是因为loadmovie有延迟,在loadmovie的第二帧以后才能把外部真正影片载入进来。于是: _root.createEmptyMovieClip(mc, _root.getNextHighestDepth(); mc.loadMovie(logo.gif); _root.onEnterFrame = function() trace(mc._width); ; 效果就出来了 0 88 88 88 . 另外需要注意的是: 1。不要把_root.onEnterFrame = 写成mc.onEnterFrame = 因为载入后会覆盖原事件。 2。loadmovie调用swf时,影片的_width不是影片的发布宽度,是当前帧最大覆盖的宽度和mc原理是一样的 Flash游戏开发常用函数代 作者:游牧人2 类型:闪吧BBS 来源:闪吧对象数组 比如要构建一个有很多属性的数组,简单的可以这样做: 2004 代码: var a:Array = new Array(); for (var i = 0; i10; i+) ai = new Object(); ai.x = 10; ai.y = 10*i; = -; ai.id = i; / 随便你给什么属性啊。 /先用局部变量存储对象会更好一点。 var a=new Array() for(var i=0;i10;i+) var ta=new Object(); ta.x=10; ta.y=10; =n+i; a.push(ta); /或者更简便一点的方法: var a=new Array() for(var i=0;i10;i+) ai=x:10,y:10,name:n+i 程序控制角色运动 下面这段代码控制 MovieClip mc 从 (50,50) 横向运动到(100,50) 停止,速度为 5 pixel: mc._x = mc._y=50; mc.onEnterFrame = function() _x += 5; trace(_x); if (_x = 100) delete (mc.onEnterFrame); ; 精确计时 我们设定了时间为 60 秒,然后通过 setInterval 来定期(每1000milliseconds)触发一个函数 runTimer。 function runTimer 用来计时,当时间到了以后,转去执行 outThere。 function outThere 用来处理时间到了以后的动作,不要忘记 clearInterval(intervalID),停止计时。 var time:Number = 60; var intervalID:Number; intervalID = setInterval(runTimer, 1000); function runTimer() time-; trace(time); if (time = 0) outThere(); function outThere() / blah blah blah clearInterval(intervalID); 找到目前最小的一个可用的深度 Depth(来自国外) 针对 Flash Player 6 的: availTopDepth = function () var allDepths = ; for (var z in _root) if (_rootz instanceof Button | _rootz instanceof MovieClip | _rootz instanceof TextField) allDepths.push(_rootz.getDepth(); if (allDepths.length != 0) sortAll = function (a, b) if (ab) return 1; else return 0; allDepths.sort(sortAll); return (parseInt(allDepthsallDepths.length-1)+1); ; trace(_root.availTopDepth(); 放置一个 MovieClip 在 Stage,再执行这段 Action 就会得到最近的一个可用深度。我们也可以用这个来创建绝对不 会出问题的 MovieClip,比如: _root.createEmptyMovieClip(mc_name, availTopDepth(); getNextHighestDepth() 以及 getInstanceAtDepth(depth)是 for player 7 的。 鼠标消隐 鼠标消隐之后,右健弹出菜单,鼠标就又出现了,并且一直保留着 完整的解决方法是:在 左健抬起、右健第二次抬起、回车键抬起的时候再次消隐鼠标。 完整的方法比较复杂,下面是一个简单的解决方法,可以解决绝大多数的问题: onEnterFrame=function() if(Key.isDown(1)| Key.isDown(Key.ENTER) Mouse.hide(); 我常用的一个加速度移动的代码 /以下代码放到主场景第一帧 stop(); _global.a = 5; /移动加速度,越大越慢 _global.click_x = 0; /用来记录点击鼠标的位置 _global.click_y = 0; _root.onMouseDown = function() _global.click_x = _root._xmouse; _global.click_y = _root._ymouse; /me是受控mc的instance name me.onEnterFrame = function() if (Math.abs(_global.click_x-me._x)2 & Math.abs(_global.click_y-me._y)1000 | Number(a_v.text)0) /default value a_v.text = 5; else _global.a = Number(a_v.text) ? Number(a_v.text) : 5; /trace(_global.a); ; 随机输出1到100而不从复的语句 seq = new Array(100); pArray = new Array(100); function makeRandom() for (i=1; i=100; i+) seqi = A; function mRandom() while (true) n = int(random(100)+1; if (seqn = A) seqn = 0; break; return (n); function rArray() for (i=1; idis) delete onEnterFrame; ; 计算两个对象之间/两点之间的距离(注册点) function getDistanceOf(target1, target2, x2, y2) if (arguments.length = 4) dx = x2-target1; dy = y2-target2; else if (arguments.length = 2) dx = target2._x-target1._x; dy = target2._y-target1._y; return Math.sqrt(dx*dx+dy*dy); /Arguments 对象是一个数组,其中包含作为参数传递给任何函数的值。每次在动作脚本中调用函数时,都会为该函 数自动创建 Arguments 对象。同时还会创建一个局部变量 arguments,使您可引用 arguments 对象。 让播放的MC暂停一段时间 function pausePlay(sec) pfunc = function () this.play(); clearInterval(this.pint); stop(); this.pint = setInterval(this, pfunc, sec*1000); /这样调用.sec是暂停的时间,单位是秒. pausePlay(2); onHitTest(target),自己写的一个MC事件,当该MC与指定的MC hitTest的时候触发事件.其实也没什么特别的地方,一样也是用setInterval来实现 stop(); MovieCtotype.listen = function(target) if (this.isHiting = undefined) this.isHiting = this.hitTest(target); if (this.hitTest(target) if (this.isHiting = false) this.broadcastMessage(onHitTest, this, target);/广播事件,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房地产开发项目成本控制实务操作
- 小学语文古诗两首教学案例分析
- 第四节 液体的基本性质说课稿-2023-2024学年高中物理选择性必修第三册沪科版(2020·上海专用)
- 2024-2025学年新教材高中地理 第一章 人口 第二节 人口迁移(3)说课稿 新人教版必修2
- Unit 1 Favourite Teacher教学设计-2025-2026学年高中英语重庆大学版2019必修第二册-重大版2019
- 课题2 溶解度教学设计-2023-2024学年初中化学九年级全一册人教版(五四学制)
- 多媒体作品的开发说课稿-2025-2026学年中职专业课-多媒体技术及应用-计算机类-电子与信息大类
- 本单元复习与测试说课稿-2025-2026学年小学劳动四年级下册人教版《劳动教育》
- 第5课 第二次工业革命说课稿-2025-2026学年初中历史世界历史 第二册统编版(五四学制)
- 2025-2030中国手术机器人临床普及度与医保支付影响分析
- 地下室外墙大截面套管后开洞加固防水处理节点技术
- 幼儿园膳食委员会含内容两篇
- 3D打印技术在食品加工设备制造中的应用
- 人教版六年级英语上册《全册》完整版
- 2023人教版九年级语文上册 第一单元主题阅读 课件
- 媒介素养概论 课件 刘勇 第0-4章 绪论、媒介素养-新闻评论
- 铁丝镀锌工操作规程培训
- 美慧树课件教材培训
- 2023年北京市中考物理试卷(解析版)
- 严防管制刀具 对自己和他人负责-校园安全教育主题班会课件
- 幼儿园学生近视防控工作领导小组及岗位职责
评论
0/150
提交评论