flash8的name分配类
为了在函数内部设置不重复的影片 就必须确定其名称是否被占用
我的第一种做法是递归文件名查询,这种方法不适合重复使用超过256次,即递归的极限次数,但是是最简单的方法,这种方法是对名称进行检测,如果其名称有重复就在名称后加一个字符,依次叠加
//重名查询
static function name(path:MovieClip, nam:String) {
if (path[nam] == undefined) {
return nam;
}
return name(path, nam+"_dup");
}
但是我发现当运用大型的构造的时候 256可能已经不能达到满意的要求 还有因为递归重名检测造成的文件名的长度剧增 也对脚本调试造成一定阻碍
所以我又设计了另一种方式,当然这种方式复杂了一些 但是相对于第一种有了少许优化
//重名查询
static function getName(path:MovieClip, nam:String) {
if (path[nam] == undefined) {
return nam;
}
var str = string.reverse(nam);
str = (parseInt(str)).toString();
if (str == "NaN") {
return getName(path, nam+"1");
} else {
str = string.reverse(str);
var str2 = strx.slice(0, strx.length-str.length);
return getName(path, str2+(parseInt(str)+1));
}
}
这是字符串进行倒置所需要的函数,原理就是将字符串转变为数组,将数组倒置,再转变回字符串
static function reverse(str:String):String {
var ary=str.split("")
ary.reverse()
return (ary.join(""));
}
在上面的运算中我将字符串进行两次倒置得到的数字就是正确地值,再用递归检测一下就可以了,这种方法的递归基本为1左右[除非你把mc1以后的命名全部占用]
也许我这种方法也有不足的地方,以后学习再继续优化吧