Actionscript 3 动作脚本3-向对象添加渐变

Actionscript 3 动作脚本3-向对象添加渐变,actionscript-3,flash,matrix,gradient,Actionscript 3,Flash,Matrix,Gradient,我有一个叫做“蓝盒”的MovieClip实例,它只是一个蓝色的“绘图对象”。它位于一个名为“option1MC”的容器内,该容器位于舞台上的“option1Container”内。。它的颜色可以这样改变: option1Container.addEventListener(MouseEvent.MOUSE_OVER, option1ContainerOver); var optionOver:ColorTransform = new ColorTransform(); optionOver.c

我有一个叫做“蓝盒”的MovieClip实例,它只是一个蓝色的“绘图对象”。它位于一个名为“option1MC”的容器内,该容器位于舞台上的“option1Container”内。。它的颜色可以这样改变:

option1Container.addEventListener(MouseEvent.MOUSE_OVER, option1ContainerOver);

var optionOver:ColorTransform = new ColorTransform();
optionOver.color = 0xC56516;

function option1ContainerOver(evt:Event):void {
    option1Container.option1MC.BlueBox.transform.colorTransform = optionOver;
}
我想把颜色改成渐变色。这就是我所尝试的:

var mtr:Matrix = new Matrix();
mtr.createGradientBox(option1Container.option1MC.BlueBox.width, option1Container.option1MC.BlueBox.height, 0, 0, 0);
mtr.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x0000FF], [1, 1], [0x00, 0xFF], mtr); 
mtr.graphics.drawRect(0,0,option1Container.option1MC.BlueBox.width, option1Container.option1MC.BlueBox.height);
但是,现在当我运行.fla文件时,它给了我一个错误,告诉我:

Access of possible undefined property graphics through a reference with static type flasg.geom:Matrix:
指的是台词

mtr.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x0000FF], [1, 1], [0x00, 0xFF], mtr); 
mtr.graphics.drawRect(0,0,option1Container.option1MC.BlueBox.width, option1Container.option1MC.BlueBox.height);

知道为什么吗?

A
Matrix
没有
graphics
属性。您需要将此应用于具有
图形
属性的
显示对象
。在您的设置中会出现如下情况:

//create the sprite to do the gradient fill on or use your MovieClip
//var spriteObject:Sprite = new Sprite() or just use option1Container;

//enter your matrix
var mtr:Matrix = new Matrix(); 
mtr.createGradientBox(option1Container.BlueBox.width, option1Container.BlueBox.height, 0, 0, 0);

//apply it to the sprite
sprite.graphics.beginGradientFill("linear", [0xFF0000, 0x0000FF], [1, 1], [0x00, 0xFF], mtr); 
sprite.graphics.drawRect(0, 0, 50, 40); 
sprite.graphics.endFill(); 
addChild(sprite);
我在这里创建了一个sprite变量,这是不必要的,因为您可以将
sprite
option1Container

您也可以参考adobe的帮助:

现在,如果在IDE中绘制
MovieClip
图形,则当前无法更改它。在这种情况下,您可以创建一个新的
MovieClip
,并将其添加到容器中,如下所示:

//note I made a target variable just to save on typing:
var target:MovieClip = option1Container.option1MC.BlueBox;
var gradientLayer:MovieClip = new MovieClip();

var gradientBox:Matrix = new Matrix(); 
gradientBox.createGradientBox(target.width, target.height, 0, 0, 0); 
gradientLayer.graphics.beginGradientFill("linear", [0xFF0000, 0x0000FF], [1, 1], [0x00, 0xFF], gradientBox); 
gradientLayer.graphics.drawRect(0, 0, target.width, target.height); 
gradientLayer.graphics.endFill(); 

//giving the asset a name will allow you to easily remove it later
gradientLayer.name = "gradientLayer";

target.addChild(gradientLayer);
请注意,我给渐变资源命名为“gradientLayer”。如果以后要删除此子项,可以使用以下方法:

option1Container.option1MC.BlueBox.removeChild( option1Container.option1MC.BlueBox.getChildByName( "gradientLayer" ) );

由于
矩阵
不是具有
图形
成员.hm的
显示对象
,因此Option1容器已处于状态,因此我不需要执行addChild(Option1容器)操作,对吗?出于某种原因,当我执行“option1Container.graphics.BeginGraphics(线性)”,[0xFF0000,0x0000FF],[1,1],[0x00,0xFF],mtr);option1Container.graphics.drawRect(0,0,50,40);option1Container.graphics.endFill();”时,它不会更改电影剪辑中蓝色框的颜色。我也尝试过“option1Container.BlueBox.graphics”,但也没有改变它的颜色。知道为什么吗?如果不看你的设置,我不知道为什么它不起作用。当
spriteObject
newsprite()
newmovieclip()时,我提供的代码是正确的,是一个工作示例
如果我在精灵上添加一个子元素并应用图形属性,也可以正常工作。嗯,好吧,假设舞台上有一个叫做“option1Container”的movieclip,里面有一个叫做“option1MC”的movieclip,里面有一个叫做“BlueBox”的movieclip,它是一个圆角矩形的实例,在flash中绘制并转换为放在库中的movieclip。要将BlueBox的颜色从蓝色更改为“option1Container.option1MC.BlueBox.transform.colorTransform=optionOver;”(假设optionOver是一种颜色转换)。。你知道如何把蓝盒子的颜色从一种颜色变成一种渐变色吗?啊,我明白了,我会把它加入我的答案中。