在as3中着色svg文件的不同层

时间:2012-01-08 18:15:48

标签: flash actionscript-3 actionscript svg

我有一个项目,其中svg文件的不同层需要着色。我尝试进行颜色转换,但它只是在svg图像的顶部放置了颜色叠加。在AS3中是否有任何可以通过编程方式为不同颜色的svg文件的各层着色?

提前致谢。

1 个答案:

答案 0 :(得分:2)

SVG是一种XML格式,因此Flash可以读取它。但是,Adobe已经停止支持SVG(除了Illustrator和其他几个),所以无论你是否可以做一件特定的事情,这真的是一个混合包。

关于您正在使用的svgViewer,它在名为com.flowde.svg.svgViewer的{​​{1}}类中使用递归方法来处理SVG的XML。这种方法要么吸取一些东西,要么递归,或者其他什么。

查看SVG,一些文件使用SVG组(read up on it here)。 。 。是你的意思是层?如果是,那么addSVGNodeToMC()addSVGNodeToMC()命令中确实有一个条目用于switch()标记。所以这就是你(可能)应该劫持着色代码的地方。

但是有一个关于如何使用颜色的问题。在SVG中,您可以使用属性方法或<g>方法。 style="*style def*"方法将此XML格式转换为通用对象(将其视为地图,样式名称为键,样式值为地图条目的值)。使用方法getStyle(),将两种不同的样式组合在一起,getCombinedStyle(styleA, styleB)中的所有条目都会覆盖styleB中任何匹配的样式名称。您可以根据需要随时拨打styleA

此组合样式对象最终传递给getCombinedStyle(),后者将其转换为AS3 / Flash样式。

所以看起来好的中断就是用你想要的样式颜色构建initSetStyle(),然后使用Object。此代码应具有一些区分不同组的功能,因此您可以使用组的id属性或其他来确定颜色。为笔划或填充着色:

getCombinedStyle(styleA, yourStyleObject)

您可以将该功能称为:

private function setYourGroupStyle(st, groupId){
    var yourStyleObject:Object = new Object();

    // for the stroke color:
    // In place of simply setting the color value, 
    // you could create another method like 
    // someColorFunctionality(groupId) and call that here.
    yourStyleObject['stroke'] = "#ff0000"; 

    // for the fill color:
    yourStyleObject['fill'] = "#ff0000"; 

    return getCombinedStyle(st, yourStyleObject);
}

请注意,值[...] case "g": st = setYourGroupStyle(st, node.attribute("id")); child=new Sprite(); for each(var el:XML in node.elements()){ var c2=addSVGNodeToMC(el,child,st); if(c2) child.addChild(c2); } break; [...] 可以是任何值,因此您可以将其设置为某种类型的计数器(例如groupId),然后根据该值定义发生的事情。< / p>

但您可能希望获得使用此类的书面许可。我没有找到任何许可协议,这使你陷入法律困境。如果是商业项目,那么获得许可是非常值得的。

HTH!