1

我想知道为什么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 个 3d 平面是性能杀手。

我只能想到这一点,因为beginFill()不使用笔组lineStyle(),这可能会导致问题,但是我真的很想知道这个问题,因为我需要我的 uber-super-semi3d-spinner 在改变颜色时旋转而不是他的边界!:)

提前致谢!

4

1 回答 1

1

我不知道为什么 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);
于 2011-10-27T06:05:22.677 回答