查看完整版本: Flash MX 编程深层次应用-高级特效(3)

冰冷的心 2007-12-10 20:03

Flash MX 编程深层次应用-高级特效(3)

</script></div><font id="zoom"><DIV style="FONT-SIZE: 18px; COLOR: #990000; FONT-FAMILY: ; 宋体: " align=center>3.2 综合特效(1)</DIV><DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 180%" align=left><BR>&nbsp;&nbsp;&nbsp;&nbsp; <P class=MsoNormal><SPAN style="FONT-FAMILY: 幼圆"><FONT size=2>上面特效的代码比较深奥难懂,下面就讲两个相对简单一点的特效。第一个是麦克风的使用,这个特效由于没有相关帮助文档,所以要使用某些功能只能慢慢地尝试,这样让编程变得麻烦;第二个特效为血管特效,它是对画线函数的绝好应用,非常值得大家学习。</FONT></SPAN></P><H3><A name=_Toc23411471><SPAN lang=EN-US><FONT size=2>3.2.1&nbsp; </FONT></SPAN></A><SPAN style="FONT-FAMILY: 方正隶书简体"><FONT size=2>麦克风的控制</FONT></SPAN></H3><P class=MsoNormal><FONT size=2><SPAN style="FONT-FAMILY: 幼圆">在</SPAN><SPAN lang=EN-US>Flash MX</SPAN><SPAN style="FONT-FAMILY: 幼圆">中已经可以支持麦克风了,但是不知何故,</SPAN><SPAN lang=EN-US>Macromedia</SPAN><SPAN style="FONT-FAMILY: 幼圆">没有公开这个功能的使用。在查找一些国外的文档资料之后,发现了一些与麦克风相关的函数及方法:</SPAN></FONT></P><H6><SPAN lang=EN-US><FONT size=2>micname.attachAudio(Microphone.get())</FONT></SPAN></H6><P class=MsoNormal><FONT size=2><SPAN style="FONT-FAMILY: 幼圆">创建一个动画片断来存储麦克风的一些参数与属性。这里的</SPAN><SPAN lang=EN-US>micname</SPAN><SPAN style="FONT-FAMILY: 幼圆">可以是任意名字,在后面的程序中并不会用到这个名字,它由系统自动控制。</SPAN></FONT></P><H6><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Symbol">&Ouml;<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US>Microphone.get()&nbsp; </SPAN><SPAN style="FONT-FAMILY: 幼圆">取得麦克风的对象。</SPAN></FONT></H6><H6><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Symbol">&Ouml;<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US>setUseEchoSuppression(n)&nbsp; </SPAN><SPAN style="FONT-FAMILY: 幼圆">消除麦克风的回声,</SPAN><SPAN lang=EN-US>n</SPAN><SPAN style="FONT-FAMILY: 幼圆">等于</SPAN><SPAN lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 幼圆">时表示不消除,</SPAN><SPAN lang=EN-US>1 </SPAN><SPAN style="FONT-FAMILY: 幼圆">表示消除。</SPAN></FONT></H6><H6><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Symbol">&Ouml;<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US>setRate(n)&nbsp; </SPAN><SPAN style="FONT-FAMILY: 幼圆">设定采样率,</SPAN><SPAN lang=EN-US>n</SPAN><SPAN style="FONT-FAMILY: 幼圆">的取值可以是</SPAN><SPAN lang=EN-US>5,8,11,22,44</SPAN><SPAN style="FONT-FAMILY: 幼圆">分别代表对应的</SPAN><SPAN lang=EN-US>kHz</SPAN><SPAN style="FONT-FAMILY: 幼圆">。</SPAN></FONT></H6><H6><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Symbol">&Ouml;<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US>setSilenceLevel(n)&nbsp; </SPAN><SPAN style="FONT-FAMILY: 幼圆">用途不明,</SPAN><SPAN lang=EN-US>n</SPAN><SPAN style="FONT-FAMILY: 幼圆">取值从</SPAN><SPAN lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 宋体">~</SPAN><SPAN lang=EN-US>100</SPAN><SPAN style="FONT-FAMILY: 幼圆">,默认值是</SPAN><SPAN lang=EN-US>10</SPAN><SPAN style="FONT-FAMILY: 幼圆">。</SPAN></FONT></H6><H6><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Symbol">&Ouml;<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US>setGain(n)&nbsp; </SPAN><SPAN style="FONT-FAMILY: 幼圆">麦克风的增益。取值从</SPAN><SPAN lang=EN-US>0</SPAN><SPAN style="FONT-FAMILY: 宋体">~</SPAN><SPAN lang=EN-US>100</SPAN><SPAN style="FONT-FAMILY: 幼圆">。这个值越大,对声音的敏感度就越大,一点小小的声音可以放出很大的音量值。当这个值被设置之后,只要不退出程序,再次使用麦克风时,它就仍然使用上次的值,除非又重新对这个值进行了设置。它的默认值是</SPAN><SPAN lang=EN-US>50</SPAN><SPAN style="FONT-FAMILY: 幼圆">。</SPAN></FONT></H6><H6><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Symbol">&Ouml;<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US>activityLevel()&nbsp; </SPAN><SPAN style="FONT-FAMILY: 幼圆">返回麦克风音量,取值从</SPAN><SPAN lang=EN-US>–1</SPAN><SPAN style="FONT-FAMILY: 宋体">~</SPAN><SPAN lang=EN-US>100 </SPAN><SPAN style="FONT-FAMILY: 幼圆">,本项内容属于只读,不能设置。</SPAN></FONT></H6><H6><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Symbol">&Ouml;<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US>Microphone.names&nbsp; </SPAN><SPAN style="FONT-FAMILY: 幼圆">用来支持麦克风录音的设备名。</SPAN></FONT></H6><P class=MsoNormal><SPAN style="FONT-FAMILY: 幼圆"><FONT size=2>目前来说可以查到的关于麦克风的资料就是这些,现在来看一个具体实例的代码:</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>_root.createEmptyMovieClip("mic", 1);</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>_root.mic.attachAudio(Microphone.get());</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>_root.myMic = Microphone.get();</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>_root.myMic.setUseEchoSuppression(1);</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>_root.myMic.setGain(100)</FONT></SPAN></P><P class=a3><FONT size=2><SPAN lang=EN-US>//</SPAN><SPAN style="FONT-FAMILY: 幼圆">设置采样频率</SPAN></FONT></P><P class=a3><SPAN lang=EN-US><FONT size=2>_root.myMic.setRate(44);</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>this.onEnterFrame = function() {</FONT></SPAN></P><P class=a3><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; //</SPAN><SPAN style="FONT-FAMILY: 幼圆">返回麦克风的音量从</SPAN><SPAN lang=EN-US>–1</SPAN><SPAN style="FONT-FAMILY: 幼圆">至</SPAN><SPAN lang=EN-US>100</SPAN></FONT></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; level = _root.myMic.activityLevel;</FONT></SPAN></P><P class=a3><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; //</SPAN><SPAN style="FONT-FAMILY: 幼圆">控制大小变化的速度</SPAN></FONT></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; osci += ((level)+1)/1;</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; if (osci&gt;360) {</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; osci = 0;</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; }</FONT></SPAN></P><P class=a3><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; //</SPAN><SPAN style="FONT-FAMILY: 幼圆">控制周围的多边形与中心的那个之间的距离</SPAN></FONT></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; ml = (0-level)/6;</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; radius = Math.sin(osci*Math.PI/180)*(ml+100);</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; rotation += (level)/2+1;</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; this.clear();</FONT></SPAN></P><P class=a3><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp; //</SPAN><SPAN style="FONT-FAMILY: 幼圆">多边形的边数</SPAN></FONT></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; angle = 8;</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; for (j=0; j&lt;angle; j++) {</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xradius = Math.cos((j*360/angle)*Math.PI/180)*ml*(radius/angle);</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yradius = Math.sin((j*360/angle)*Math.PI/180)*ml*(radius/angle);</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.lineStyle(level/3, "0xffffff");</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x = Math.cos((arcAngle+rotation)*Math.PI/180)*radius;</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y = Math.sin((arcAngle+rotation)*Math.PI/180)*radius;</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.moveTo(x+250+(xradius), y+200+(yradius));</FONT></SPAN></P><P class=a3><FONT size=2><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</SPAN><SPAN style="FONT-FAMILY: 幼圆">画中心的等边形的边</SPAN></FONT></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=1; i&lt;angle+1; i++) {</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x = Math.cos(((i*(360/angle))+rotation)*Math.PI/180)*radius;</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y = Math.sin(((i*(360/angle))+rotation)*Math.PI/180)*radius;</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.lineTo(x+250+(xradius), y+200+(yradius));</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; }</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>};</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>stop();</FONT></SPAN></P><P class=MsoNormal><SPAN lang=EN-US><FONT size=2></FONT></SPAN>&nbsp;</P><P class=MsoNormal><FONT size=2><SPAN style="FONT-FAMILY: 幼圆">这段代码是根据麦克风的声音画一组正多边形。图</SPAN><SPAN lang=EN-US>3-8</SPAN><SPAN style="FONT-FAMILY: 幼圆">是音量在接近</SPAN><SPAN lang=EN-US>100</SPAN><SPAN style="FONT-FAMILY: 幼圆">时的效果,图</SPAN><SPAN lang=EN-US>3-9</SPAN><SPAN style="FONT-FAMILY: 幼圆">是音量在接近</SPAN><SPAN lang=EN-US>50</SPAN><SPAN style="FONT-FAMILY: 幼圆">的效果。</SPAN></FONT></P><P class=a2 align=center><SPAN lang=EN-US><FONT size=2><IMG height=187 src="http://edu.chinaz.com/Files/BeyondPic/image008.jpg" width=201>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <IMG height=187 src="http://edu.chinaz.com/Files/BeyondPic/image009.jpg" width=202></FONT></SPAN></P><P class=a0 align=center><FONT size=2><SPAN style="FONT-FAMILY: 宋体">图</SPAN><SPAN lang=EN-US>3-8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-FAMILY: 宋体">图</SPAN><SPAN lang=EN-US>3-9</SPAN></FONT></P><P class=MsoNormal><SPAN style="FONT-FAMILY: 幼圆"><FONT size=2>值得注意的是,在执行代码的过程中取了以下变量的输出值,内容如下:</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>Variable _level0.$version = "WIN 6,0,4,0"</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>Variable _level0.myMic = [object #1, class 'Microphone'] {</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; index:[getter/setter] 0,</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; activityLevel:[getter/setter] 0,</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; name:[getter/setter] "C-Media Wave Device",</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; silenceLevel:[getter/setter] 10,</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; silenceTimeOut:[getter/setter] 2000,</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; rate:[getter/setter] 44,</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; gain:[getter/setter] 50,</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; useEchoSuppression:[getter/setter] 1,</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp;&nbsp;&nbsp; muted:[getter/setter] false</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>&nbsp; }</FONT></SPAN></P><P class=a3><SPAN lang=EN-US><FONT size=2>……</FONT></SPAN></P><P class=MsoNormal><SPAN style="FONT-FAMILY: 幼圆"><FONT size=2>从这里显示出来的属性可以看出,这个麦克风对象还有几个可控制或者可读取的属性:</FONT></SPAN></P><H6><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Symbol">&Ouml;<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US>index</SPAN><SPAN style="FONT-FAMILY: 幼圆">:这个属性明显是一个数值,与麦克风句柄有关。</SPAN></FONT></H6><H6><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Symbol">&Ouml;<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US>silenceTimeOut</SPAN><SPAN style="FONT-FAMILY: 幼圆">:这个属性与上面的</SPAN><SPAN lang=EN-US>silenceLevel</SPAN><SPAN style="FONT-FAMILY: 幼圆">属性一起控制麦克风。</SPAN></FONT></H6><H6><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Symbol">&Ouml;<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=EN-US>muted</SPAN><SPAN style="FONT-FAMILY: 幼圆">:静音控制。这个明显是一个布尔变量值。为</SPAN><SPAN lang=EN-US>true</SPAN><SPAN style="FONT-FAMILY: 幼圆">时麦克风就无声音了。</SPAN></FONT></H6><P class=MsoNormal><SPAN style="FONT-FAMILY: 幼圆"><FONT size=2>当然了,由于没有文档,所以对这些参数的意义只能是估计与猜测了,可能会有不正确的地方,暂时也不知用什么函数及方法来控制或者取得这几项参数值,如果大家能找到关于这几项内容的文档,也请来信告知</FONT>。</SPAN></P></DIV></font>
页: [1]
查看完整版本: Flash MX 编程深层次应用-高级特效(3)