我在从Illustrator SWF访问内容时遇到问题(我使用Illustrator创建swf,导出I Save图层作为符号)。 当我使用flash创建我的swf文件时,我可以使用此代码访问形状和符号。
我正在尝试获取并更改swf文件中符号的颜色
var flashMovie:Sprite = this.content as Sprite;
for (var i:int = 0; i < flashMovie.numChildren; i++)
{
flashMovie.getChildAt(i).name;
flashMovie.getChildAt(i).transform.colorTransform.color;
}
但是当我使用Illustrator创建我的swf文件时,它什么也没有返回。
如何访问内容并更改Illustrator SWF的颜色
答案 0 :(得分:1)
是否可以使用Illustrator导出AVM2(AS 3)swf?如果我错了,请纠正我,但据我所知,Illustrator CS5仍然输出AVM1(AS 1&amp; 2)swf。在AS3项目中,所有加载的AS2电影都由flash.display.AVM1Movie类表示。这个类没有显示链子节点,它只是一个DisplayObject,显示了渲染的AVM1 Clip。由此可见,您无法访问Illustrator定义的任何符号。
我不太确定你是否可以使用call()方法在AVM1Movie中调用某些方法。是否可以在Illustrator中添加AS2方法?可能不是......
您可以将每个元素导出为单个swf,也可以选择其他一些导出格式,例如svg。
package
{
import flash.display.AVM1Movie;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.net.URLRequest;
import flash.utils.describeType;
public class AIImportDemo extends Sprite
{
private var __loader:Loader = new Loader();
public function AIImportDemo()
{
super();
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE
__loader.contentLoaderInfo.addEventListener(Event.COMPLETE,__onComplete);
__loader.load(new URLRequest('assets/myAIExport.swf'));
}
private function __onComplete($e:Event):void{
addChild(__loader);
trace(describeType(__loader.content));
trace("is MovieClip "+ (__loader.content is MovieClip)); // false
trace("is Sprite "+ (__loader.content is Sprite)); // false
trace("is Shape "+ (__loader.content is Shape)); // false
trace("is AVM1Movie "+ (__loader.content is AVM1Movie)); // true
trace("is Display Object "+(__loader.content is DisplayObject)); // true
}
}
}
答案 1 :(得分:0)
最好的办法是将对象从Illustrator复制/粘贴到Flash CS。这样,矢量对象可以作为AS3 Shape对象移植。您也可以将它们拆分为不同的符号等......