2013-11-11 3 views
0

Я работаю над видеопроигрывателем для своего класса онлайн-скриптов, и у меня есть мои ролики, моя игра и моя кнопка Mute, работающая с правильными состояниями зависания и всего , Они расположены правильно и готовы к работе. Теперь я должен создать свой ползунок времени и мой ползунок тома, и именно там возникает трудность. Я создал файл ActionScript 3 под названием VolumeBar, и я понятия не имею, почему он не работает. В моей голове это должно работать, но я думаю, что чего-то не хватает.Смутно, почему Volume Control не работает в ActionScript 3

Мои символы: BTN_Slider, BTN_VolumeBar и BTN_VolumeBarSlider. Ни один из учебников не поможет, поскольку все они используют «действия» функции в рамках которых я не делаю

Главная

import flash.display.Sprite; 
import flash.events.Event; 
import flash.events.MouseEvent; 
import flash.media.SoundTransform; 

public class Main extends Sprite 
{ 
    static public var splash:SplashScreen; 
    private var theXMLFile:String = "VideoList.xml"; 
    private var theVideoList:VideoList; 
    private var videoChoice:int = 0; 
    private var sndTransform:SoundTransform; 
    private var lastVolume:int = 1; 
    private var btn_Mute:BTN_Mute; 
    private var btn_Play:BTN_Play; 
    private var btn_Volume:VolumeBar; 
    static public var screenState:int = 0; 
    static public var nextState:int = 1; 

    public function Main() 
    { 
     theVideoList = new VideoList(theXMLFile); 
     btn_Mute = new BTN_Mute(581.3, 457.5); 
     btn_Play = new BTN_Play(42, 457.5); 
     btn_Volume = new VolumeBar(624.3, 457.5); 
     btn_Mute.addEventListener(MouseEvent.CLICK, clickedMute); 
     addEventListener(Event.ENTER_FRAME, update); 
    } 

    private function update(e:Event):void 
    { 
     switch(screenState) 
     { 
      case 0 : 
       break; 
      case 1 : 
       videoChoice = 0; 
       nextState = 2; 
       displayScreen(); 
       trace("TEST"); 
       addChild(btn_Volume); 
       addChild(btn_Mute); 
       addChild(btn_Play); 
       break; 
      case 2 : 
       videoChoice = 1; 
       nextState = 3; 
       changeScreen(); 
       break; 
     } 
     screenState = 0; 
    } 

    public function displayScreen():void 
    { 
     splash = new SplashScreen(theVideoList.videoXML.theVideo[videoChoice].fileLoc.text()); 
     addChild(splash); 
    } 

    public function changeScreen():void 
    { 
     var toShow:String = theVideoList.videoXML.theVideo[videoChoice].fileLoc.text(); 
     splash.connectVideo(toShow); 
    } 

    private function muteVolume(vol:Number):void 
    { 
     sndTransform = new SoundTransform(vol); 
     splash.vidStream.soundTransform = sndTransform; 
    } 

    private function clickedMute(mb:MouseEvent):void 
    { 
     if(btn_Mute.isMuted == true) 
     { 
      muteVolume(lastVolume = 1); 
      btn_Mute.isMuted = false; 
     } 
     else if(btn_Mute.isMuted == false) 
     { 
      muteVolume(lastVolume = 0); 
      btn_Mute.isMuted = true; 
     } 
    } 

    static public function togglePlay():void 
    { 
     splash.vidStream.togglePause(); 
    } 
} 

VolumeBar

import flash.display.*; 
import flash.events.*; 
import flash.geom.Rectangle; 

public class VolumeBar extends MovieClip 
{ 
    var sliderControl = new BTN_Slider(); 
    var sliderVolume = new BTN_VolumeBar(); 
    var knobWidth:int = sliderControl.width; 
    var trackWidth:int = sliderVolume.width; 
    var trackX:int = sliderVolume.x; 
    var boundWidth = trackWidth - knobWidth; 
    var boundsRect:Rectangle = new Rectangle(trackX, 0, boundWidth, 0); 

    public function VolumeBar(theX:int, theY:int) 
    { 
     this.x = theX; 
     this.y = theY; 

     sliderControl.addEventListener(MouseEvent.MOUSE_DOWN, startDragging); 
     sliderControl.addEventListener(MouseEvent.MOUSE_UP, stopDragging); 
     sliderControl.addEventListener(MouseEvent.MOUSE_OUT, stopDragging); 
    } 

    private function startDragging(mb:MouseEvent):void 
    { 
     sliderControl.startDrag(false, boundsRect); 
    } 

    private function stopDragging(mb:MouseEvent):void 
    { 
     sliderControl.stopDrag(); 
    } 
} 

Все, что я хотел бы знать, прямо сейчас КАК получить его на экране и в принципе перемещать. Как только я это пойду, я знаю, что смогу самостоятельно отдохнуть. Спасибо Stack Overflowers!

+0

ли ползунок перемещается при перетаскивании? Я думаю, что эти вычисления ошибочны: var trackX: int = sliderVolume.x; var boundWidth = trackWidth - knobWidth; var boundsRect: Rectangle = new Rectangle (trackX, 0, boundWidth, 0); – Eran

ответ

0



Вы не забудьте добавить sliderVolume и sliderControl в списке отображения?
Я думаю, что вы могли бы сделать что-то вроде этого:

VolumeBar.as:

import flash.display.*; 
import flash.events.*; 
import flash.geom.Rectangle; 

public class VolumeBar extends MovieClip 
{ 
    var sliderControl = new BTN_Slider(); 
    var sliderVolume = new BTN_VolumeBar(); 
    var knobWidth:int = sliderControl.width; 
    var trackWidth:int = sliderVolume.width; 
    var trackX:int = sliderVolume.x; 
    var boundWidth = trackWidth - knobWidth; 
    var boundsRect:Rectangle = new Rectangle(trackX, 0, boundWidth, 0); 

    /** a function to call when volume change **/ 
    private var _volumeChanged:Function; 

    public function VolumeBar(theX:int, theY:int, volumeChanged:Function) 
    { 
     this.x = theX; 
     this.y = theY; 

        // add the volume bar to the display list 
     addChild(sliderVolume); 
        // add the slider to the display list 
     addChild(sliderControl); 
     // keep reference to the update function 
     _volumeChanged = volumeChanged; 

     sliderControl.addEventListener(MouseEvent.MOUSE_DOWN, startDragging); 
     sliderControl.addEventListener(MouseEvent.MOUSE_UP, stopDragging); 
     sliderControl.addEventListener(MouseEvent.MOUSE_OUT, stopDragging); 
    } 

    private function startDragging(mb:MouseEvent):void 
    { 
     sliderControl.startDrag(false, boundsRect); 
     stage.addEventListener(MouseEvent.MOUSE_MOVE, _onMouseMove); 
    } 

    private function stopDragging(mb:MouseEvent):void 
    { 
     sliderControl.stopDrag(); 
     stage.removeEventListener(MouseEvent.MOUSE_MOVE); 
    } 

    private function onMouseMove(e:MouseEvent):void 
    { 
     // calculate the volume for the current cursor position 
     var value:Number = (trackWidth - sliderControl.x)/boundWidth; 
     _volumeChanged(value); 
    } 
} 

и изменить свой основной класс следующим образом:

public function Main() 
{ 
    theVideoList = new VideoList(theXMLFile); 
    btn_Mute = new BTN_Mute(581.3, 457.5); 
    btn_Play = new BTN_Play(42, 457.5); 

    // add the callback function to the VolumeBar constructor 
    btn_Volume = new VolumeBar(624.3, 457.5, _onVolumeChanged); 
    btn_Mute.addEventListener(MouseEvent.CLICK, clickedMute); 
    addEventListener(Event.ENTER_FRAME, update); 
} 

/** handle volume changing **/ 
private function _onVolumeChanged(value:Number):void 
{ 
    // change your volume here 
} 

Конечно, вы можете использовать события, чтобы сделать это но я предпочитаю обратные вызовы, и, если вы предпочитаете, вы можете изменить громкость при перетаскивании мышью вместо mouseMove.

Я надеюсь, что это вам поможет :)

+0

Это потрясающе! Спасибо огромное! Он работает и все! У меня есть несколько проблем с позиционированием с моим слайдером, но это полностью работает! Начиная понимать ActionScript 3 все больше и больше каждый день! – user2101203

Смежные вопросы