2012-04-27 2 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); 
関連する問題