效果
我吧他打包成一个类了,把滚动 元件复制过去 和 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()
}