Изменение цвета заливки MovieClip Actionscript 3

Попробуйте вместо этого использовать componentWillMount

7
задан Charles Sprayberry 28 January 2012 в 22:46
поделиться

3 ответа

This cant be done once you've drawn a shape as action script has no way of determining what is a stroke and what is a fill.

You have a couple of options.

Separate your fill and stroke into separate movie clips and set the color transform to only apply to the fill.

or

If it's a simple shape, draw it using the Graphics object where you can specify fill colours and stroke colours.

Likely hood is, and my preferred method, would be the first options as the shape is likely to be complex and leaving it in the fla gives greater control for a designer being able to change it rather than a developer. It's a little more work though and slightly more complex.

5
ответ дан 6 December 2019 в 21:19
поделиться

Если вы нацеливаетесь на FP10 и вам нужен простой фильтр, подобный тому, который вы пробовали с ColorTransform, вы можете написать ядро ​​PixelBlender, которое принимает 2 аргумента цвета (один для источника, один для назначения ), сопоставьте пиксель с исходным цветом и поменяйте их местами назначения; что-то вроде этого:

//I release this under the MIT License. Use it to your heart's content.

<languageVersion : 1.0;>

kernel ReplaceColor
<   namespace : "PIPEEP";
    vendor : "PiPeep";
    version : 1;
    description : "Replace color";
>
{
    input image4 src;
    output pixel4 dst;

    parameter pixel4 sColor
    < 
        minValue:pixel4(0.); 
        maxValue:pixel4(255.);
    >; 
    parameter pixel4 dColor;
    parameter float tolerance;

    void
    evaluatePixel()
    {
        dst = sampleNearest(src,outCoord());
        pixel4 sColorAdjusted = abs((sColor/pixel4(255.)) - dst);
        if(sColorAdjusted.r < tolerance && sColorAdjusted.g < tolerance && sColorAdjusted.b < tolerance && sColorAdjusted.a < tolerance) {
            dst = dColor;
        }
    }
}

Помнит, почему он ненавидит IDE PixelBlender.

РЕДАКТИРОВАТЬ: Помните, что это не будет работать со сглаживанием, но если вы используете stage.quality = "low", это не имеет значения.

Чтобы добавить его в as3, попробуйте это (украдено с http://scriptplayground.com/tutorials/as/Flash-CS4-and-Pixel-Bender-Overview/ , поэтому вам понадобится чтобы изменить несколько строк кода):

Первая часть кода определяет некоторые переменные, которые будут использоваться позже. Единственные два которые могут выглядеть новыми, - это шейдеры и ShaderFilter. Это новое во Flash Игрок 10 и классы отвечает за обращение с Pixel Данные фильтра Bender.

 var loader: URLLoader;
var shader: Shader;
var shaderFilter: ShaderFilter;
var image: MovieClip;
var timer: Timer;
var timerInt: uint = 40;

Следующим шагом в коде является загрузка изображение на сцену, которую вы добавили в предыдущих шагах.

 image = new SampleImage (); image.y =
20; image.x = 25;

addChild (изображение);

Первые два метода, которые будут созданы предназначены для загрузки файла pbj и инициализация создания фильтра процесс

 функция startEffect () {loader = new
URLLoader (); loader.dataFormat =
URLLoaderDataFormat.BINARY;
 loader.addEventListener (Event.COMPLETE,
loadComplete); loader.load (новый
URLRequest ("sample.pbj")); }



function loadComplete (e: Event): void {
 шейдер = новый шейдер (loader.data);
initFilter (); }

Следующая функция initFilter () - вызывается, когда файл pbj успешно загружен, поэтому фильтр может быть создан. Этот фильтр устанавливает r, g, b значения цвета изображения, которые по сути выдувает детали из образ. « shader.data.red.value » для пример ссылается на пиксель код бендера, который был написан на начало, если вы заметили, что код имеет "красный параметр с плавающей точкой", который является переменная float для установки уровня красный. В этом случае значение установлен на 20. Этот процесс повторяется для двух других цветов, а затем передается в экземпляр изображения.

Последняя часть этой функции устанавливает таймер, который будет работать, чтобы применить это фильтровать, пока изображение не вернется к своему нормальный вид

 function initFilter () {
 shader.data.red.value = [20];
 shader.data.green.value = [20];
 shader.data.blue.value = [20];
 shaderFilter = новый
ShaderFilter (шейдер); image.filters =
[shaderFilter];



 timer = новый таймер (timerInt, 0);
 timer.addEventListener (TimerEvent.TIMER,
timerHit); timer.start (); }

Последняя функция повторяет процесс применения фильтра, но сначала захватывает текущие значения фильтра и вычитает 0,1 из значения на каждом проходить. Этот процесс медленно удаляет фильтровать интенсивность от изображения до он полностью ушел. Это timerHit () функция вызывается из таймера, который был создан в initFilter () function.

 function timerHit (e: TimerEvent): void
{
 если (shader.data.red.value == 1)
 {
 timer.stop ();
 возвращение;
 }

 var r: uint = shader.data.red.value - 0,1;
 var g: uint = shader.data.green.value - 0,1;
 var b: uint = shader.data.blue.value - 0,1;

 shader.data.red.value = [г];
 shader.data.green.value = [г];
 shader.data.blue.value = [b];
 shaderFilter = новый ShaderFilter (шейдер);
 image.filters = [shaderFilter]; 
}

Последний шаг в коде - запуск процесс, который в этом приложении выполняется путем вызова startEffect () функция, так что мы и будем делать это

startEffect ();

Простите, что у вас кровь из глаз! Думаю, это мой самый длинный ответ!

2
ответ дан 6 December 2019 в 21:19
поделиться

Я знаю, что это немного поздно для игры, но у меня была такая же проблема, и я исправил ее немного по-другому. Возможно, это не поможет, так как будет работать только в ограниченных обстоятельствах *, но я начал с того, что моя форма была заполнена белым и обведена черным. Таким образом, вы можете применить преобразование цвета с помощью множителей RGB, чтобы уменьшить белый цвет до желаемого цвета, оставив черную границу нетронутой. Итак, чтобы сделать ваш объект красным (с черной рамкой), используйте:

function paint() {
    shape.transform.colorTransform = new ColorTransform(1, 0, 0);
}

Или для оранжевого цвета Stack Overflow (все еще с черной рамкой):

function paint() {
    shape.transform.colorTransform = new ColorTransform(0.996, 0.478, 0.082);
}

* Это будет работать, только если вам нужен только один цвет с черной рамкой.

5
ответ дан 6 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: