Actionscript 3 如何根据鼠标位置更改MovieClip透明度?

Actionscript 3 如何根据鼠标位置更改MovieClip透明度?,actionscript-3,graphics,2d,rectangles,Actionscript 3,Graphics,2d,Rectangles,所以,我试图使矩形网格变得更透明,鼠标越靠近它 使用一些基本的数学知识,我以为我得到了它,但相反,我似乎得到了一个奇怪的图形错误(可能?),如下所示: 环的中间是鼠标所在的位置 涉及透明度的部分代码: private function update(e:Event = null):void { for (var i:int = 0; i < buttons.length; i++) { lightFact = getDistance(buttons[i])

所以,我试图使矩形网格变得更透明,鼠标越靠近它

使用一些基本的数学知识,我以为我得到了它,但相反,我似乎得到了一个奇怪的图形错误(可能?),如下所示:

环的中间是鼠标所在的位置

涉及透明度的部分代码:

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
    }
}
私有函数更新(e:Event=null):无效
{
对于(变量i:int=0;i
getDistance只是获取从块到鼠标的距离


如果有必要,每个矩形都是一个电影剪辑。

如果您试图这样做:

然后我认为你的问题基本上是你的alpha值在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;

            }
        }
    }
}
包
{
导入flash.display.*;
导入flash.events.*;
公共类lightFactTest扩展了MovieClip
{
private-var-boxesArray:Array=new-Array();
私有变量xDist:Number=0;
私有变量yDist:Number=0;
私有变量d:Number=0;
私有变量大小:Number=0;
私有变量大小_半径:Number=0;
公共函数lightFactTest():void
{
//为矩形阵列创建背景。
变量BG_box:Sprite=新Sprite();
BG_box.graphics.lineStyle();
BG_box.graphics.beginll(0x080839);
BG_box.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
BG_box.graphics.endFill();
addChild(背景框);
//#创建精灵栅格(矩形)。
对于(变量i:int=0;i<(stage.stageWidth/10);i++)
{
对于(变量j:int=0;j<(stage.stageHeight/10);j++)
{
变量框:Sprite=新Sprite();
box.graphics.lineStyle();
box.graphics.beginll(0xFFFFFF);
box.graphics.drawRect(0,0,10,10);
box.graphics.endFill();
addChild(box);
方框x+=i*10;//+50;
方框y+=j*10;//+50;
推(盒);
}
}
addEventListener(Event.ENTER_FRAME,lightCalc);
}
私有函数lightCalc(e:事件):无效
{
尺寸_辉光=3.5;
尺寸_半径=0.64;
//#迭代数组,计算每个距离,然后计算alpha。
for(变量i:int=0;i

希望有帮助

如果您正试图这样做:

然后我认为你的问题基本上是你的alpha值在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;

            }
        }
    }
}
包
{
导入flash.display.*;
导入flash.events.*;
公共类lightFactTest扩展了MovieClip
{
private-var-boxesArray:Array=new-Array();
私有变量xDist:Number=0;
私有变量yDist:Number=0;
私有变量d:Number=0;
私有变量大小:Number=0;
私有变量大小_半径:Number=0;
公共函数lightFactTest():void
{
//为矩形阵列创建背景。
变量BG_box:Sprite=新Sprite();
BG_box.graphics.lineStyle();
BG_box.graphics.beginll(0x080839);
BG_box.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
BG_box.graphics.endFill();
addChild(背景框);
//#创建精灵栅格(矩形)。
对于(变量i:int=0;i<(stage.stageWidth/10);i++)
{
对于(变量j:int=0;j<(stage.stageHeight/10);j++)
{
变量框:Sprite=新Sprite();
box.graphics.lineStyle();
box.graphics.beginll(0xFFFFFF);
box.graphics.drawRect(0,0,10,10);
box.graphics.endFill();
addChild(box);
方框x+=i*10;//+50;
方框y+=j*10;//+50;
推(盒);
}
}
addEventListener(Event.ENTER_FRAME,lightCalc);
}
私有函数lightCalc(e:事件):无效
{
尺寸_辉光=3.5;
尺寸_半径=0.64;
//#迭代数组,计算每个距离,然后计算alpha。
for(变量i:int=0;i