2016-06-11 44 views
0

所以,我試圖使鼠標靠近它的每個矩形網格變得更透明。如何根據鼠標位置更改MovieClip透明度?

使用一些基本的數學,我想我已經得到了它,而是它似乎我有一個奇怪的圖形錯誤如下所示(也許):

enter image description here

環的中間是其中鼠標是。與透明的交易代碼

部分:

private function update(e:Event = null):void 
{ 
    for (var i:int = 0; i < buttons.length; i++) { 
     lightFact = getDistance(buttons[i]) 
     lightBrightness = lightPower - (lightFact * 10) 
     buttons[i].alpha = lightBrightness 
    } 
} 

getDistance的是剛剛從塊到鼠標越來越距離。

每個矩形都是一個影片剪輯,如果有的話。

+0

你說錯了,你不知道該怎麼做? – BotMaster

回答

5

如果你正在試圖做到這一點:

lightFact

那麼我認爲你的問題基本上是你的阿爾法值範圍從0到約3000或類似的東西。這會導致奇怪的效果。該值需要從0到1的平滑範圍(所以它需要是一個浮點數,如Number)。

這裏是產生上述,我爲你寫的圖像,將讓你在正確的方向開始的代碼:

package 
{ 

    import flash.display.*; 
    import flash.events.*; 


    public class lightFactTest extends MovieClip 
    { 

     private var boxesArray: Array = new Array(); 
     private var xDist: Number = 0; 
     private var yDist: Number = 0; 
     private var d: Number = 0; 
     private var size_Glow : Number = 0; 
     private var size_Radius : Number = 0; 

     public function lightFactTest(): void 
     { 
      // creates a background for rectangles array. 
      var BG_box: Sprite = new Sprite(); 
      BG_box.graphics.lineStyle(); 
      BG_box.graphics.beginFill(0x080839); 
      BG_box.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); 
      BG_box.graphics.endFill(); 
      addChild(BG_box); 

      //# creates a grid of sprites (rectangles). 
      for (var i:int = 0; i < (stage.stageWidth/10); i++) 
      { 
       for (var j:int = 0; j < (stage.stageHeight/10); j++) 
       { 
        var box: Sprite = new Sprite(); 
        box.graphics.lineStyle(); 
        box.graphics.beginFill(0xFFFFFF); 
        box.graphics.drawRect(0, 0, 10, 10); 
        box.graphics.endFill(); 
        addChild(box); 
        box.x += i*10; //+ 50; 
        box.y += j*10; //+ 50; 
        boxesArray.push(box); 
       } 
      } 

      addEventListener(Event.ENTER_FRAME, lightCalc); 
     } 


     private function lightCalc(e: Event): void 
     { 
      size_Glow = 3.5; 
      size_Radius = 0.64; 

      //# iterates through the array calculating each distance and then alpha. 
      for (var i:int = 0; i < boxesArray.length; i++) 
      { 
       xDist = Math.abs(stage.mouseX - boxesArray[i].x); 
       yDist = Math.abs(stage.mouseY - boxesArray[i].y); 
       //var d: Number = Math.pow(xDist * xDist + yDist * yDist, 0.5); 
       d = Math.sqrt(xDist * xDist + yDist * yDist)/(size_Radius/5); 

       //# This is the code that you really need to focus on... 
       boxesArray[i].alpha = Math.min(1/d * 10, 1) * (Math.PI/0.5 - Math.min(size_Radius, 0)) * size_Glow; 

      } 
     } 
    } 
} 

希望幫助!

+0

這是正確的答案...但我希望你不介意次要的代碼編輯。我注意到沒有彩色BG,所以在測試時會在白色BG上製作白色方塊(未來的用戶可能會認爲它不工作,並將全白色屏幕混淆爲空畫布)。 –

+1

根本不是!謝謝。在那裏還有其他一些很好的接觸。 –