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

全くありません!ありがとう。他にも素敵な触れ合いがあります。 –

関連する問題