2016-06-11 26 views
0

Also versuche ich, ein Raster aus Rechtecken je transparenter zu machen, je näher die Maus dran ist.Wie kann MovieClip-Transparenz basierend auf der Mausposition geändert werden?

einige grundlegende Mathematik verwenden, ich dachte, dass ich es bekommen hatte, sondern es scheint, dass ich einen seltsamen Grafikfehler bekam hier gezeigt (vielleicht?):

enter image description here

Die Mitte der Ringe ist, wo die Maus ist.

Teil des Codes, der mit Transparenz befasst:

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 nur wird immer Abstand vom Block der Maus.

Jedes Rechteck ist ein Movieclip, wenn es darauf ankommt.

+0

Sie nennen einen Fehler die Tatsache, dass Sie nicht wissen, wie etwas zu tun ist? – BotMaster

Antwort

5

Wenn Sie versuchen, dies zu tun:

lightFact

Dann denke ich, Ihr Problem ist im Grunde, dass Ihr Alpha-Wert auf etwa 3000 0 ist hin oder so ähnlich. Das wird seltsame Effekte verursachen. Der Wert muss glatt von 0 bis 1 reichen (also muss es eine Fließkommazahl wie in Number sein).

Hier ist der Code, der das Bild erzeugt wird, über den ich für Sie geschrieben, dass Sie in der richtigen Richtung erhält begonnen:

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; 

      } 
     } 
    } 
} 

Hoffnung, das hilft!

+0

Dies ist die richtige Antwort ... Aber ich hoffe, dass es Ihnen nichts ausmacht, den untergeordneten Code zu bearbeiten. Ich bemerkte, dass es keine Farbe BG gab, also macht es beim Testen weiße Quadrate auf einem weißen BG (ein zukünftiger Benutzer könnte annehmen, dass es nicht funktioniert und einen ganz weißen Bildschirm als leere Leinwand verwechseln). –

+1

Überhaupt nicht! Vielen Dank. Ein paar andere nette Extras drin. –