http://bbs.9ria.com/viewthread.php?tid=84152&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000
资讯类型: 翻译 来源页面: http://www.flashperfection.com/tutorials/Actionscript-knob-volume-control-as3-38351.html 资讯原标题: as3 volume control knob, Flash sound actionscript 资讯原作者: flashperfection 翻译词数: 800 词
我的评论:
对这篇文你有啥看法,跟贴说说吧!欢迎口水和板砖,哈哈。欢迎大家和我们一同分享更多资讯。
音量控制可以是简单的声音开关系统或是移动垂直或水平线上的拖动条来增加或减小播放声音。在这里我们将创建可旋转360度的音量旋钮来控制Flash AS3中的声音。 下面是你将在本教程结束时创建的音量控制旋钮的例子。因为我们在做音响控制系统,请尝试播放声音并转动旋钮。注意:当你旋转控制旋钮时你会听到声音减小或变大。 创建音量控制旋钮: 作为创建音量控制旋钮的第一步,我们需要创建圆形来充当控制旋钮。打开源代码,在库里面你会发现注册点在中心的旋钮影片剪辑元件。 注意:创建圆形影片剪辑元件保持注册点在中心这点非常重要 那么这就是我们创建的圆,并转换为注册点在中心的影片剪辑元件。命名为“knob_mc”影片剪辑。 在创建影片剪辑之后图形部分已经做好了,接下来我们需要在一个帧里写代码了。 as3旋钮控制代码: 现在功作是添加用户转动它的as3圆旋转的代码到旋钮上去,当触发鼠标按下事件时我们需要开始转动旋钮和当释放鼠标按键时结束转动。
- knob_mc.addEventListener(MouseEvent.MOUSE_DOWN,turn);
- stage.addEventListener(MouseEvent.MOUSE_UP,endTurn );
- function turn(e:Event):void
- {
- stage.addEventListener(MouseEvent.MOUSE_MOVE,turn);
- var position:Number = Math.atan2(mouseY - knob_mc.y,mouseX - knob_mc.x);
- //trace(position);
- var angle:Number=(position/Math.PI) * 180;
- knob_mc.rotation = angle;
- }
- function endTurn(e:MouseEvent):void
- {
- knob_mc.removeEventListener(MouseEvent.MOUSE_DOWN, turn);
- stage.removeEventListener(MouseEvent.MOUSE_MOVE,turn);
- knob_mc.addEventListener(MouseEvent.MOUSE_DOWN,turn);
- }
复制代码
代码说明: 上面的代码是得到一个角度或旋转点,点击此链接到相似的数学和as代码 Math.atan2()是actionscript中内建的将给定的X,Y转换为弧度值的数学函数,再通过将弧度值除以PI再乘以180转换成角度值。
- var position:Number = Math.atan2(mouseY - knob_mc.y,mouseX - knob_mc.x);
- //trace(position);
- var angle:Number=(position/Math.PI) * 180;
- knob_mc.rotation = angle;
复制代码
所以,最后分配给knob_mc的是角度值。 规范化的角度: 我们已分配给“knob_mc.rotation =angle”的角的取值范围是从0到180度和负的0到180度,在这里我们要使角度从0到360度。
- function normalizeVolume( angle:Number ):Number
- {
- angle %= 360;
- if (angle < 0)
- {
- angle = 360 + angle;
- }
- //trace("::"+percentage(angle,0,360));
- return percentage(angle,0,360)/100
- }
复制代码
转换角度值为音量: 把取值范围是0到360度标准的角转换成0到100,最后再通过除以100使最终取值范围为0到1。
- function percentage( X:Number, minValue:Number, maxValue:Number ):Number
- {
- return (X - minValue)/(maxValue - minValue) * 100;
- }
复制代码
用as3加载声音: 接下来我们继续给音量控件一些行为,在Flash Actionscript中加载外部的声音,而不是从库中加载。加载声音的过程很简单,就像我们加载外部swf图像进Flash一样。加载外部声音是简单的通过创建一个新的Sound对象实例来加载声音文件的,一旦文件加载完成,文件将被内置的play()函数播放。
- var soundClip:Sound=new Sound();
- var sndChannel:SoundChannel=new SoundChannel();
- soundClip.load(new URLRequest("song.mp3"));
- soundClip.addEventListener(Event.COMPLETE,onComplete,false,0,true);
- function onComplete(evt:Event):void {
- sndChannel=soundClip.play();
- }
复制代码
AS3中控制旋钮来调节音量: 我们已经加载了外部声音并且音量控制旋钮也已经准备好了,下一个是使用soundTransform来控制音量。
- if(sndChannel!=null){
- var st:SoundTransform = new SoundTransform(normalizeVolume(angle));
- sndChannel.soundTransform = st
- }
复制代码
完整的as3代码:
- import flash.media.SoundTransform;
- knob_mc.addEventListener(MouseEvent.MOUSE_DOWN,turn);
- stage.addEventListener(MouseEvent.MOUSE_UP,endTurn );
- function turn(e:Event):void
- {
- stage.addEventListener(MouseEvent.MOUSE_MOVE,turn);
- var position:Number = Math.atan2(mouseY - knob_mc.y,mouseX - knob_mc.x);
- var angle:Number=(position/Math.PI) * 180;
- if(sndChannel!=null){
- var st:SoundTransform = new SoundTransform(normalizeVolume(angle));
- sndChannel.soundTransform = st
- }
- knob_mc.rotation = angle;
- }
- function endTurn(e:MouseEvent):void
- {
- knob_mc.removeEventListener(MouseEvent.MOUSE_DOWN, turn);
- stage.removeEventListener(MouseEvent.MOUSE_MOVE,turn);
- knob_mc.addEventListener(MouseEvent.MOUSE_DOWN,turn);
- }
- function normalizeVolume( angle:Number ):Number
- {
- angle %= 360;
- if (angle < 0)
- {
- angle = 360 + angle;
- }
- return percentage(angle,0,360)/100
- }
- function percentage( X:Number, minValue:Number, maxValue:Number ):Number
- {
- return (X - minValue)/(maxValue - minValue) * 100;
- }
- var soundClip:Sound=new Sound();
- var sndChannel:SoundChannel=new SoundChannel();
- soundClip.load(new URLRequest("song.mp3"));
- soundClip.addEventListener(Event.COMPLETE,onComplete,false,0,true);
- function onComplete(evt:Event):void {
- sndChannel=soundClip.play();
- }
复制代码
注:添加Song.mp3是和SWF放置在同一文件夹的。 |