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);
    }

[トレース]一番上までドラッグすると:

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

[トレース]一番下までドラッグすると:

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

私はこれが問題があるところだと信じています:

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

-4)はオフセット値であるため、完全にドラッグしてオフにすると、4ではなく0になります。
これを何らかの方法で逆にする必要があるため、上記のトレースがスワップします...下に移動するとuserVolume = 4と上がると30になります。

これを見てくださった方、よろしくお願いします!:)

4

4 に答える 4

4

こんなに単純なことはできないので、何かが足りないに違いありませんね。

userVolume = 30-Math.round(((soundContrGray.y * soundContrGray.height) / 10) - 4);
于 2010-02-01T20:44:59.663 に答える
2

100%のボリュームが必要な場合は0を取得し、0のボリュームが必要な場合は30を取得しているので...これを試してください

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);
于 2010-02-01T20:40:40.703 に答える
2

概念的には、音を低くして背を高くすることsoundContrGrayです。したがって、現在の値と比較するには、最大値(またはこの場合は最大高さ)が必要です。30ボリュームスライダーの背景の高さだと思います。bg背景の高さに使用します。

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

これにより、実際の要素の高さや画面上のどこにあるかに関係なく、相対的な音量設定が得られます。

于 2010-02-01T20:55:08.263 に答える
1

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

于 2010-02-01T20:58:10.480 に答える