Skip to content

Flash常见问题记录

frankwinter edited this page Dec 21, 2017 · 18 revisions

Flash常见问题记录:

  • 输出含有诸如🐲🐲💩💩💩❤️❤特殊字符的长度

  • 压缩PNG,可以调节清晰度

  • adobe的AIR SDK更新方法, 以及官方推荐的方法,同样可以覆盖以前使用flex sdk的项目以及,但是需要注意,即使这样,inline方法仍旧无法使用,只能新建一个使用asc2.0的项目才行。另外如果要使用Adobe的查看性能的工具Scout,项目最好使用asc2.0编译的项目,因为可以查看更详细的数据,普通flex 4.6项目很多数据无法查看。

  • adobe的SWF version列表

  • 关于SWF version和target player的讨论,还有这篇, 以及

  • 关于使用swfobject.js嵌入swf无法播放的问题,请参考swfobject.js项目中的issue讨论。或者是墨客。

  • 使用swfobject.js嵌入swf,发现chrome会有个小swf闪烁一下(尺寸300 * 150),这是由于swfobject会进行版本预判,动态创建一个swf的原因,可以将其隐藏起来。(在testPlayerVersion方法中,添加o.setAttribute("hidden", true);即可,或者是o.style.visibility = "hidden";如果是前一个,那获取版本的方法就不会执行,后一种会执行,所以需要执行版本检测的用后一种)。

  • 在chrome中发现使用swfobject.js嵌入swf后,默认暂停,请参考该解决方案。

  • as3的String.replace如果传入一个function,那需要注意该function返回匹配索引时,如果是汉字,可能会以字节数为基准进行返回(也就是一个汉字字符占用了3个普通的字符的大小)

function replaceString(str:String, ...args):String{
	var r:RegExp, provider:Object;
	if(args.length == 1 && typeof(args[0]) == "object" && !(args[0] is Array)){
		r = /\((?i:[a-z]++)\) | \{(?i:[a-z]++)\} | \[(?i:[a-z]++)\]/gx;
		provider = args[0] as Object;
	}
	else{
		r = /\(\d+\) | \{\d+\} | \[\d+\]/gx;
		if(args[0] is Array){
			provider = args[0] as Array;
		}
		else{
			provider = args;
		}
	}
	str = str.replace(r, function(match:String, ...t):String{
		trace(t[0]); //这里注意,返回的是9,21
		return provider[match.slice(1, match.length - 1)];
	});
	return str;
}
var str:String = "这可能{0}是一个{1}";
var bytes:ByteArray = new ByteArray();
bytes.writeMultiByte("这可能", "utf-8");
bytes.position = 0;
trace(bytes.length); //9,并不是3
trace(replaceString(str, "就", "bug")); //这可能就是一个bug
  • 如何将字符串转化为Base64码
//如何将字符串转化为Base64码
var hello:String = "Hey";

//如下输出Ascii码值
var n:int = hello.charCodeAt(0); //72 
var g:int = hello.charCodeAt(1); //101 
var s:int = hello.charCodeAt(2); //121

//如下输出二进制字符串表达式(8位为一个字节)
trace(n.toString(2)); //01001000
trace(g.toString(2)); //01100101
trace(s.toString(2)); //01111001

//如下输出Base64数值, 2的6次方为64,所以取之前二进制的表达式,将其每六位作为一个组合
//010010   18    S
//000110   6     G
//010101   21    V
//111001   57    5

//如上每个组合的二进制转换为十进制数值为18,6,21,57
//然后对照Base64对照表,可以得出SGV5的结果
Clone this wiki locally