Как мне изменить математику громкости моего слайдера громкости? - PullRequest
3 голосов
/ 01 февраля 2010

Я создаю видеоплеер, и я застрял в части слайдера громкости. Это вертикальный слайдер в стиле 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.

Заранее спасибо всем, кто взглянет на это! :)

Ответы [ 4 ]

4 голосов
/ 01 февраля 2010

Я, должно быть, что-то упустил, потому что это не может быть так просто, не так ли?

userVolume = 30-Math.round(((soundContrGray.y * soundContrGray.height) / 10) - 4);
2 голосов
/ 01 февраля 2010

Концептуально, что вы хотите сделать, это чтобы звук был выше soundContrGray. Таким образом, вам нужно максимальное значение (или в этом случае максимальная высота) для сравнения с текущим значением. Я так понимаю, что 30 - это высота фона слайдера громкости. Я буду использовать bg для высоты фона.

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

Это даст относительную громкость независимо от высоты фактических элементов или от того, где они находятся на экране.

2 голосов
/ 01 февраля 2010

Поскольку вы получаете 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);
1 голос
/ 01 февраля 2010

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

...