当改变电影胶片AS3的颜色变换时,保持文本的颜色不变



我正在制作一个纸牌游戏,已经到了被"销毁"的牌变成被销毁的队伍的地步。我现在只需要检查放置的牌旁边的左侧网格单元格的代码:

if (SCaL > aR) 
{
    trace("Winner!")
    colorTransform2.color = 0
    for (var i:int = 0; i<buttons[foundL].getChildAt(0).numChildren; i++)
    {
        DisplayObject(buttons[foundL].getChildAt(0).getChildAt(i)).transform.colorTransform = colorTransform2
        trace(DisplayObject(buttons[foundL].getChildAt(0).getChildAt(i)).transform.colorTransform.color)
    }
    colorTransform2.color = selectedCard.color
    DisplayObject(buttons[foundL].getChildAt(0).graphics)

}

除一个问题外,此操作效果良好:电影中的文字也会改变的颜色

我试着在更改卡片颜色后更改文本颜色转换,但没有任何效果,我在网上也找不到任何与此问题有关的内容。

应用颜色变换时,它也会影响所有子项。它实际上不会更改子对象的颜色变换,因此您无法通过更改子对象属性来撤消它。相反,渲染系统将任何变换应用于显示对象的子对象。

避免的方法是不要让文本字段成为你正在更改颜色的任何东西的子字段。

在你的情况下,你可以添加一个额外的精灵或movieclip层,这样顶部的movieclip/sprite就包含了整个卡片,然后它包含了两个movieclip:sprite,一个包含你想改变颜色的东西,另一个包含了你想保持不变颜色的东西。

如前所述,colorTransform应用于DisplayObject的整棵树,从而应用于它的所有子级/子级,因此应用于显示对象的不需要的变换是显示层次设计不好的标志。

您可以通过将子代添加到另一个容器来更改它,这将取消颜色转换,但在更改父时,您必须小心显示顺序、位置、比例

在某些情况下,您可能会应用反向变换,但通常情况下,colorTransform会应用于离散的颜色值(整数),钳制甜菜根[0.255],所以你经常会丢失太多信息,在保持可接受质量的同时无法反转(例如,你可以通过应用新的ColorTranform(2.0,2.0,2.0)来反转新的ColorTransform(0.5,0.5,0.5),但这几乎是你所能做的。任何系数0或接近0都会丢弃(几乎)来自相应颜色通道的所有信息,coeff大于1将剪裁值等)

最新更新