转换常见问题汇总

发布时间:2015-10-29

1.LayaFlash转H5后如何把背景颜色设置为透明?

  在用到Starling框架项目里设置透明背景色才有实际意义,调用语句修改项目背景颜色的代码如下:

IFlash.setBgcolor(-1);

  更多关于项目背景设置的内容请参见《LayaFlash新建项目》的“入口类文件”章节内容。


2.使用LayaFlash转换项目时报错是否可以对LayaFlash引擎进行修改?

  LayaFlash引擎库不需要用户维护,如发现引擎有bug,可以到Layabox问答社区上反馈,我们会努力解决。


3.如何添加第三方的JS类库?

  在LayaFlash生成的HTML文件中添加第三方代码库的引入标签,例如添加一个名为“zlib.min.js”的第三方JS文件,要在HTML文件里定义入口JS文件的标签前增加一个<script>标签:

<script src='zlib.min.js' loader='laya'></script>

  更详细的内容请参见《LayaFlash编译项目》在H5项目入口HTML文件中引入其他JS文件”章节的内容。


4.项目代码中包含全角空格,LayaFlash是否支持?

  代码片段中不支持全角空格,定义的字符串中可以使用。


5.项目用到了大量的反射应用,LayaFlash是否支持?

  不支持通过使用describeType方法动态获取类型描述数据的反射机制。如有需求,要先生成所需类型的XML描述文件,在项目运行的时候加载使用。


6.使用LayaFlash进行项目转换时,是否需要源代码?能直接使用swc文件吗?

  LayaFlash是基于源码的编译,项目和所包含的开发框架必须有源码,因此目前工具无法自动解析swc里的代码,不能直接使用swc文件编译成H5项目后,除了Laya.swc外,需要将源代码引用到项目工程里才能使用。其它swc文件要将后缀名改为.zip(或.rar)文件,使用解压缩工具解压,使用反编译工具反编译解压出的swf文件,获取里面AS3源码,保存到项目的源代码目录下(src目录)。遇到需要反编译的情况建议使用反编译工具:JPEXS Free Flash Decompiler

  对于原swf文件包含逻辑代码(链接类、帧代码/标签等)的情况,要手动或者反编译提取swf文件中的链接类的代码。


7.为什么Flash项目使用的swf文件要用LayaFlash工具解析后才能使用呢?

  这是由于LayaFlash做了swf标签解析,原有的swf文件需要通过我们的工具进行一次处理,生成引擎能够识别的一种二进制数据格式,但扩展名仍然使用“.swf”,这是为了让原有的AS3加载逻辑做最少的改动就能进行开发或转换。详细内容请参见《Flash资源转换工具》教程的内容。


8.swf已经加载成功,但是图片没有加载进来,资源是否可以提前加载?

  可以使用预加载,LayaFlash提供了IFlash.preSwfAssets()方法,建议考虑到手机的性能和加载时间,建议需求选择性加载。预加载方法的详细使用方法请参见《LayaFlash新增方法》教程的“资源预加载:IFlash.preSwfAssets”章节内容。


9.swf的时间轴上可以放置声音吗?

  不支持嵌入的声音文件播放,需要外部加载,可以通过 addFrameScript()方法播放。


10.LayaFlash资源转换工具解析后的swf文件和原生的swf文件大小对比如何?

  LayaFlash资源转换工具转换后的swf文件体积会变小,因为原始swf包含的图片资源经转换后会被解析并生成在资源转换工具输出路径定义的目录里,新生成图片资源的格式为png格式。可以通过官方提供的PNG图片压缩工具压缩图片体积。点击下载PNGoo


11.Flash与JS的Extenallnterface转换完如何使用?

  LayaFlash的项目最终是JS与JS之间的交互,已不需要ExternalInterface类的参与。直接在Flash里使用ExternalInterface类,LayaFlash编译会报错,如果想在AS3、JS代码混合使用,请调用LayaFlash提供的宏编译标记或importJS()、__JS__()等方法。宏编译标记请参见《LayaFlash宏编译》教程;importJS()、__JS__()方法的详细内容请参见《LayaFlash新增方法》教程的“文件引入:importJS”、“直译代码方法:__JS__”等章节。


12.关于使用“LoaderInfo.parameters”读取HTML传入的参数,HTML需要如何修改?

  因为LayaFlash发布的项目已经是JS代码,所以只要在html文件中定义要传递的变量即可使用。


13.正则表达式的语句this.regExp=new RegExp("\"|\'","g|i");在LayaFlash中需要作何修改?

  JS里不用“|”分割线做分割,把“|”去掉即可。


14.正则表达式内出现p字符怎么修改?

  p在正则里是个特殊字符,建议正则表达式不要使用p字符。
  因为在js正则表达式中不支持命名组 所以不支持p字符。

  AS3中使用命名组的正则表达式示例:

var pattern1:RegExp = /(?P<abc>\d+)/;
var str1:String = "abc123";
var result1:Array = str1.match(pattern1);
trace(result1.abc);

  JS里改用普通组编写正则表达式:

var pattern2:RegExp = /(\d+)/;
var str2:String = "abc123";
var result2:Array = str2.match(pattern2);
trace(result2[1]);


15.为什么swf里场景时间轴上的动画,转成H5之后时间轴停在第一帧不播放?

  场景时间轴上的动画需要手动调用play()方法后才可进行播放。


16.如果想在手机上看转换好的H5游戏怎么办?

  手机浏览器输入服务端访问地址即可看到效果。需要查看真实效果请使用已支持了LayaPlayer运行器的手机浏览器。


17.项目中使用AGALMiniAssembler.as类报错是怎么回事?

  需要把这个类过滤掉,在AGALMiniAssembler.as类第一行添加/*[IF-FLASH]*/宏编译标记即可过滤这个类,不在LayaFlash下编译。原因是编译成H5项目后我们会提供另一个类去适配AGAL,已经不需要AGALMiniAssembler类的支持了。


18.加载图片时URLLoader的dataFormat属性为字节流。加载完成后,URLLoader的data属性为Image,这是为什么?

  图片的字节数据暂不支持,建议直接加载图片。


19.是否支持嵌入字体?

  以下是AS3中使用嵌入字体的示例:

protectd var _amedFont:Font=new AmbleR()

  因为H5的字体需要使用CSS样式定义,所以此用法在LayaFlash没有作用。