2010-02-01 53 views
3

我正在建立一个视频播放器,我有点卡在音量滑块部分。这是一个YouTube风格的垂直滑块,这意味着如果滑块处于顶部位置,音量应该是100%,并且如果滑块被拖动到底部位置,声音应该为0.目前它与我想要的相反:如何反转我的音量滑块的音量数学?

拖动滑块降低会使声音更响亮,而向上拖动会降低它。

这是我下面处理的音量滑块码。

// Sound Controller Settings ······························ 
    soundController = new SoundController(); 
    soundContrColor = soundController.colorChip; 
    soundContrGray = soundController.grayCover; 
    soundContrGray.visible  = false; 
    soundController.visible = true; 
    soundController.buttonMode = true; 
    soundController.soundSlider.addEventListener(MouseEvent.MOUSE_DOWN, sliderDown); 

// SoundController Button Mouse Events ························ 
    public function sliderDown(event:MouseEvent):void 
    { 
     soundController.soundSlider.startDrag(false, dragBounds); 
     soundController.soundSlider.addEventListener(MouseEvent.MOUSE_MOVE, sliderMove); 
     soundController.soundSlider.addEventListener(MouseEvent.MOUSE_UP, sliderUp); 
     soundContrGray.visible = true; 
    } 

    public function sliderMove(event:MouseEvent):void 
     { 
     soundContrGray.height = soundController.soundSlider.y; 
     userVolume = Math.round(((soundContrGray.y * soundContrGray.height)/10) - 4); 
     //userVolume = soundContrGray.height; 
     setVolume(userVolume); 

     trace("soundController.mouseY = "+soundController.soundSlider.y); 
     trace("soundContrColor.height = "+Math.round(soundContrGray.height)); 
     trace("userVolume    = "+userVolume+"\r"); 

     event.updateAfterEvent(); 
     } 

    public function sliderUp(event:MouseEvent):void 
    { 
     lastVolPoint = soundContrGray.height; 
     setVolume(userVolume); 
     event.updateAfterEvent(); 

     soundController.soundSlider.stopDrag(); 
     soundController.soundSlider.removeEventListener(MouseEvent.MOUSE_MOVE, sliderMove); 
     soundController.soundSlider.removeEventListener(MouseEvent.MOUSE_UP, sliderUp); 
    } 

[TRACES]当我一路拖到顶部:

soundController.mouseY = 6 
soundContrGray.height = 6 
userVolume    = 0 

[TRACES]当我拖累了所有一路下跌:我相信这是

soundController.mouseY = 56 
soundContrGray.height = 56 
userVolume    = 30 

问题所在:

userVolume = Math.round(((soundContrGray.y * soundContrGray.height)/10) - 4); 

(-4)是偏移值,当你拖动它一直关闭它,它是0而不是4。
我需要扭转这种不知何故,所以上面的痕迹将交换...下去将使userVolume = 4,并将上升将使它30.

预先感谢任何人看看这个! :)

+0

什么是'soundContrGray.y'? – 2010-02-01 20:41:50

+0

这是一个覆盖绿色音量指示符的灰色矩形,我试图首先控制绿色矩形,但获得了奇怪的结果。所以我决定改为只在绿色顶部设置灰色矩形,因为这是我控制矩形的方向。(修正的轨迹语句) – 2010-02-01 21:38:21

回答

4

我必须失去了一些东西,因为它不能被这个简单的, 它可以?

userVolume = 30-Math.round(((soundContrGray.y * soundContrGray.height)/10) - 4); 
+0

Doh就是这样:)谢谢!呃,我想我是太裹在()里面会发生什么事了,从来没有想过要这样做...... – 2010-02-01 21:32:29

2

既然你得到0,当你想100%的体积,和30,当你想0卷...试试这个

setVolume(100 - (userVolume * 100/30)); 

Substitude 0 in equation: 
setVolume(100 - (0 * 100/30)) --> simplifies to 
setVolume(100); 

Substitute 30 in equation: 
setVolume(100 - (30 * 100/30)); --> simplifies to 
setVolume(100 - (3000/30)); --> simplifies to 
setVolume(100 - 100); --> simplifies to 
setVolume(0); 
2

从概念上讲,你想要做的就是让声音降低更高soundContrGray。所以你需要一个最大值(或在这种情况下是一个最大高度)来比较当前值。我认为30是音量滑块背景的高度。我将使用bg作为背景高度。

userVolume = (soundContrGray.height/bg.heigth); 
userVolume = Math.round((1 - userVolume) * 100); 

这将给出一个与实际元素的高度无关的相对体积设置,或者它们在屏幕上的位置。

+0

啊,甜蜜的作品也是:) thx! – 2010-02-01 21:36:34

+0

我喜欢你如何说,我不需要硬编码太多的数字...... – 2010-02-01 21:57:30

1

userVolume = Math.round(100 * (1 - soundContrGray.height /(soundContrGray.y - 4)))