效果
我吧他打包成一个类了,把滚动 元件复制过去 和 new一个类就可以用。 文件下载链接 //download.csdn.net/download/qq_45236230/12565430
var bgm_sound:Sound = new Title() // 创建音效 var channel:SoundChannel = bgm_sound.play(0,int.MAX_VALUE) //循环播放 var sound_module = new Sound_module(this,channel,soundBtn,sound_flag,sliding,sound_bar) // this 传入舞台 用来在内部进行事件绑定 channel 声音通道 用来改变声音大小的 //[soundBtn sound_flag sliding sound_bar] 这一部分是 舞台上的元件。用于计算出音量大小的 stop()声音模块类
package { import flash.events.MouseEvent import flash.media.SoundTransform public class Sound_module { // 需要被调整的bgm sound_button 声音按钮 斜杆 滑块 声音条 var sound_button,sound_flag,sliding,sound_bar,stage_,bgm var slidingflag:Boolean=false // 滑块是否处于滑动状态 var audible:Boolean = true // 是否开启静音 public function Sound_module(stage_,bgm_sound,sound_button,sound_flag,sliding,sound_bar) { this.bgm = bgm_sound this.sound_button = sound_button this.sound_flag = sound_flag this.sliding = sliding this.sound_bar = sound_bar this.stage_ = stage_.stage //声音滑块的事件绑定 this.sliding.addEventListener(MouseEvent.MOUSE_DOWN,slidingDown); this.sliding.addEventListener(MouseEvent.MOUSE_MOVE,slidingMove); this.stage_.addEventListener(MouseEvent.MOUSE_MOVE,slidingMove); this.sliding.addEventListener(MouseEvent.MOUSE_UP,slidingUp); this.stage_.addEventListener(MouseEvent.MOUSE_UP,slidingUp); //按钮 this.sound_button.addEventListener(MouseEvent.CLICK,sound_buttonCLICK) // 斜杠是否隐藏 this.sound_flag.visible= !this.audible //audible指的是 能否听见 和 /的显示逻辑刚好相反 } function slidingDown(e){ this.slidingflag = true } function slidingUp(e){ this.slidingflag = false getSoundValue() } function slidingMove(e){ if (this.slidingflag){ this.sliding.x = e.stageX if (this.sliding.x < this.sound_bar.x) this.sliding.x = this.sound_bar.x+1 if (this.sliding.x > this.sound_bar.x+this.sound_bar.width ) this.sliding.x = this.sound_bar.x+this.sound_bar.width -1 } getSoundValue() //把数据写入声音大小 } function sound_buttonCLICK(e){ this.audible = !this.audible //如果为真 就是假 取反 this.sound_flag.visible = !this.audible getSoundValue() } function getSoundValue(){ var value,sliding_position if (this.audible){ sliding_position = this.sliding.x - this.sound_bar.x value = sliding_position/this.sound_bar.width } else { value = 0 } // 需要用一个 新的 SoundTransform 去替换 声音通道里的 SoundTransform才奏效 var changeForm:SoundTransform = new SoundTransform(); changeForm.volume =value bgm.soundTransform = changeForm } } }滑块改变声音大小
滑块改变声音大小 具体计算公式== 有2个关键的东西 滑块 滚动条。 我们通过滑块的 对于 滚动条的相对位置 来计算出来 滑块处于 滚动条的 百分之几。 然后 再把这个 百分比 作用到 声音大小上。 实际上 我们要达到的效果是 1.移动滑块,就会改变音量。 2.点击滑块 我们要让他跟着鼠标移动 3.滑块不会超过 bar的边界
这里我们绑定了好几个事件函数来处理以上的问题
//声音滑块的事件绑定 this.sliding.addEventListener(MouseEvent.MOUSE_DOWN,slidingDown); // 鼠标按在滑块身上 this.sliding.addEventListener(MouseEvent.MOUSE_MOVE,slidingMove); // 鼠标按在滑块上移动 this.stage_.addEventListener(MouseEvent.MOUSE_MOVE,slidingMove); // 鼠标按在滑块外移动 上松开 this.sliding.addEventListener(MouseEvent.MOUSE_UP,slidingUp); // 鼠标按在滑块上松开 this.stage_.addEventListener(MouseEvent.MOUSE_UP,slidingUp); // 鼠标按在滑块外1.鼠标按在滑块身上,让滑块更着动。这里使用了一个 slidingflag 布尔值。 当按下的时候 让他为true
2.鼠标移动。这里分为2种情况 。 在滑块上移动 和滑块外移动。 他们对应的行为都是一样的。 a.动态计算滑块相对位置 然后 获得 一个值,用那个值去改变音量 b.不让滑块越界
3.鼠标松开。这里分为2种情况 。 在滑块上松开和滑块外松开。 他们对应的行为都是一样的。 a.计算滑块相对位置 然后 获得 一个值,用那个值去改变音量
改变声音的音量关键代码 这里需要new 一个 SoundTransform 去替换原来的 声音通道的 SoundTransform
// 需要用一个 新的 SoundTransform 去替换 声音通道里的 SoundTransform才奏效 var changeForm:SoundTransform = new SoundTransform(); changeForm.volume =value bgm.soundTransform = changeForm关于静音 给这个小喇叭添加一个事件来处理this.sound_button.addEventListener(MouseEvent.CLICK,sound_buttonCLICK)
这个事件处理 主要做了这几件事 1.点击一下 就让audible 变为 false 或这 true 2. 是否显示小斜杆 3. 顺便吧声音设置为0
function sound_buttonCLICK(e){ this.audible = !this.audible //如果为真 就是假 取反 this.sound_flag.visible = !this.audible getSoundValue() }