2014-01-22 3 views
0

У меня есть экземпляр MovieClip под названием «BlueBox», который представляет собой только «Drawing Object», который является синим. Он находится внутри контейнера под названием «option1MC», который находится внутри «option1Container», который находится на стадии .. Это цвет может быть изменен следующим образом:ActionScript 3 - добавление градиента к объекту

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); 

Любая идея, почему?

+0

Поскольку 'Matrix' не является' DisplayObject' с членом 'graphics'. –

ответ

1

A Matrix не имеет graphics. Вам нужно будет применить это к DisplayObject с имуществом 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 с option1Container

Вы можете ссылаться на помощи компании Adobe для этого, а также: http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7dd7.html

Теперь, если вы нарисовали графику в IDE, вы в настоящее время не сможете ее изменить. В этом случае вы можете создать новую 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")); 
+0

hm, option1Container уже находится в состоянии, поэтому мне не нужно делать addChild (option1Container) правильно? По какой-то причине, когда я делаю «option1Container.graphics.beginGradientFill (« linear », [0xFF0000, 0x0000FF], [1, 1], [0x00, 0xFF], mtr); option1Container.graphics.drawRect (0, 0, 50, 40); option1Container.graphics.endFill(); "Он не меняет цвет синего квадрата внутри мувиклипа. Я также попытался сделать «option1Container.BlueBox.graphics», но это тоже не изменило его цвет. Любая идея почему? – user2817200

+0

Не глядя на свою установку, я не уверен, почему она не работает. Код, который я предоставил, является правильным и является рабочим примером, когда 'spriteObject' является' новым Sprite() 'или' new MovieClip(); 'и также работает корректно, если я добавляю ребенка в спрайт и применяю свойства графики. –

+0

hm, хорошо, предположим, что на сцене есть мувиклип под названием «option1Container», внутри которого есть мувиклип, называемый «option1MC», и внутри него есть мувиклип, называемый «BlueBox», который является экземпляром прямоугольника с закругленными краями , вытащенный во флэш-памяти и преобразованный в мувиклип, размещенный в библиотеке. Чтобы изменить цвет BlueBox от синего, я бы сделал «option1Container.option1MC.BlueBox.transform.colorTransform = optionOver;» (учитывая, что optionOver - это цветовое преобразование) .. знаете ли вы, как изменить цвет BlueBox от цвета к градиенту? – user2817200

Смежные вопросы