2016-06-11 42 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

根本不是!谢谢。在那里还有其他一些很好的接触。 –