2012-04-27 5 views
0

죄송합니다.이 질문이 다소 모호하지만 최근에 이런 일이 발생했습니다. 너무 복잡한 것은 아니지만 원하는 것은 수식의 영향을받는 변수 'targetVariable'입니다. 실제 문제는이 경우 'masterVolume'인 참조 된 변수가 수식의 영향을받지 않고 대신 'targetVariable'이라는 사실에 있습니다. 스크립트 하단에 'makeSlider'기능이 실행됩니다.함수 매개 변수를 사용하여 변수를 참조하려면 어떻게해야합니까?


var masterVolume:Number = 0; 
var panning:Number = 0; 

function makeSlider(sliderType, X, Y, targetVariable) { 

    var sliderHandle:MovieClip = new sliderType(); 

    addChild(sliderHandle); 
    sliderHandle.x = X; 
    sliderHandle.y = Y; 

    var dragging:Boolean = false; 

    stage.addEventListener(Event.ENTER_FRAME, updateSlider); 

    function updateSlider(e:Event):void { 
     panning = (mouseX/(stage.stageWidth/2))-1; 

     targetVariable = ((sliderHandle.x-bar.x)/bar.width); 

     output.text = masterVolume.toString(); 
     if (dragging == true && mouseX >= bar.x && mouseX <= (bar.x + bar.width)) { 
      sliderHandle.x = mouseX; 
     } 
    } 
    sliderHandle.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag); 

    function beginDrag(e:MouseEvent):void { 
     dragging = true; 
    } 

    stage.addEventListener(MouseEvent.MOUSE_UP, endDrag); 

    function endDrag(e:MouseEvent):void { 
     dragging = false; 
    } 
} 

function playSound(target, intensity:Number, pan:Number) { 
    var sound:Sound = new target(); 
    var transformer:SoundTransform = new SoundTransform(intensity, pan); 
    var channel:SoundChannel = new SoundChannel(); 

    channel=sound.play(); 

    channel.soundTransform = transformer; 
} 

stage.addEventListener(MouseEvent.MOUSE_DOWN, make); 

function make(e:MouseEvent):void { 
    playSound(test, masterVolume, panning); 
} 

makeSlider(SliderHandle, bar.x, bar.y, masterVolume); 

+0

프리미티브 (숫자, 정수 등)는 모두 값으로 전달됩니다. 당신이 얻으려고하는 것은 참조로 전달하는 것입니다. 그것을 얻으려면 객체를 전달해야합니다. – meddlingwithfire

답변

0

좋아, 그래서 Object 클래스를 공부하고 난 함수에서 그것을 객체를 만들어 변수를 참조 할 수 있다는 것을 발견 : 여기에 코드입니다. 업데이트 된 작업 스크립트는 다음과 같습니다.

var panning:Number = 0; 
var masterVolume:Number = 0; 

function makeSlider(sliderType, barType, soundType, hitBoxScale:Number, X, Y, targetVariable) { 

    var reference:Object = { targetVariable: 0 }; 

    var slider:MovieClip = new sliderType; 
    var newBar:MovieClip = new barType; 

    addChild(newBar); 
    newBar.x = X; 
    newBar.y = Y; 
    addChild(slider); 
    slider.x = X; 
    slider.y = Y; 

    var dragging:Boolean = false; 

    stage.addEventListener(Event.ENTER_FRAME, updateSlider); 

    function updateSlider(e:Event):void { 
     panning = (mouseX/(stage.stageWidth/2))-1; 
     reference.targetVariable = (slider.x-newBar.x)/newBar.width; 
     if (dragging == true && mouseX >= newBar.x && mouseX <= (newBar.x + newBar.width)) { 
      slider.x = mouseX; 
     } 
     if (reference.targetVariable <= 0.01) { 
      output.text = ("None"); 
     } 
     if (reference.targetVariable >= 0.99) { 
      output.text = ("Max"); 
     } 
     if (reference.targetVariable > 0.01 && reference.targetVariable < 0.99) { 
      output.text = (Math.round((reference.targetVariable*100))+"%").toString(); 
     } 
    } 
    stage.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag); 

    function beginDrag(e:MouseEvent):void { 
     if (mouseY >= newBar.y-hitBoxScale && mouseY <= (newBar.y + newBar.height)+hitBoxScale) { 
      dragging = true; 
     } 
    } 
    slider.addEventListener(MouseEvent.MOUSE_DOWN, beginDragFromSlider); 

    function beginDragFromSlider(e:MouseEvent):void { 
     dragging = true; 
    } 

    stage.addEventListener(MouseEvent.MOUSE_UP, endDrag); 

    function endDrag(e:MouseEvent):void { 
     if (dragging == true) { 
      playSound(soundType, reference.targetVariable, 0); 
     } 
     dragging = false; 
    } 
    stage.addEventListener(MouseEvent.MOUSE_DOWN, make); 

    function make(e:MouseEvent):void { 
     if (dragging == false) { 
      playSound(test, reference.targetVariable, panning); 
     } 
    } 
} 

function playSound(target, intensity:Number, pan:Number) { 
    var sound:Sound = new target(); 
    var transformer:SoundTransform = new SoundTransform(intensity, pan); 
    var channel:SoundChannel = new SoundChannel(); 

    channel=sound.play(); 

    channel.soundTransform = transformer; 
} 

makeSlider(defaultSlider, defaultBar, volumeIndicator, 10, 134, 211, masterVolume); 
관련 문제