Actionscript 3 动作脚本3-向对象添加渐变
我有一个叫做“蓝盒”的MovieClip实例,它只是一个蓝色的“绘图对象”。它位于一个名为“option1MC”的容器内,该容器位于舞台上的“option1Container”内。。它的颜色可以这样改变: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
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是一种颜色转换)。。你知道如何把蓝盒子的颜色从一种颜色变成一种渐变色吗?啊,我明白了,我会把它加入我的答案中。