2010-02-01 26 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)))