Цветовое преобразование ActionScript 3 изменяет только границу - PullRequest
1 голос
/ 27 октября 2011

Хотелось бы узнать, почему AS3 colorTransform преобразует только границу фигуры?

Аналогичный вопрос опубликован, однако я не думаю, что для этого нужно делать такой масштабный обходной путь.

У меня есть что-то вроде:

var sh:Shape = new Shape();
sh.graphics.lineStyle(4, 0x000000);
sh.graphics.beginFill(0xFFFF00);
sh.graphics.drawRect(0, 0, 200, 200);
sh.graphics.endFill();
addChild(sh);

Да, я знаю, что мы можем использовать with(sh.graphics) do здесь, однако, если я сделаю цветовое преобразование как:

sh.transform.colorTransform = new ColorTransform(1, 1, 1, 1, red_offset, green_ofs, b_off, 0);

Преобразуется только граница фигуры. Я пытался перерисовать на каждом кадре объект с разной заливкой, но это перебор по производительности, около 10 трехмерных самолетов были убийцами производительности.

Я могу думать только об этом, потому что beginFill() не использует ручку, установленную lineStyle(), и это может вызывать проблему, однако я действительно хотел бы знать проблему, так как мне нужен мой uber-super-semi3d- прядильщик крутится при изменении цвета, а не его границ! :)

Заранее спасибо!

1 Ответ

1 голос
/ 27 октября 2011

Я не знаю, почему ColorTransform влияет только на цвет линии (кажется, просто дизайнерское решение), но ColorMatrixFilter преобразует всю форму (протестировано). Не бойся этого - все довольно просто. Первые четыре столбца матрицы являются множителями (1,0 означает 100%), а пятый столбец добавляется к результату.

        var sht:Shape = new Shape();
        sht.graphics.lineStyle(4, 0x7F7FFF);
        sht.graphics.beginFill(0xFFFFFF);
        sht.graphics.drawRect(0, 0, 200, 200);
        sht.graphics.endFill();
        sht.x = 300;
        sht.y = 100;
        sht.filters = [ new ColorMatrixFilter(
            [   0.5, 0.0, 0.0, 0.0, 0.0,
                0.0, 1.0, 0.0, 0.0, 0.0,
                0.0, 0.0, 0.7, 0.0, 0.0,
                0.0, 0.0, 0.0, 1.0, 0.0
            ])];
        addChild(sht);
...