2012-04-27 143 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

基元(数字,int等)都是按值传递的。你试图获得的是通过参考。为了得到这个,你需要传入一个对象。 – meddlingwithfire 2012-04-27 22:15:59

回答

0

好了,于是我研究的对象类,并发现我可以通过使物体在函数引用变量。这里是更新的工作脚本:

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); 
相关问题