动画设计师在Adobe Animate软件制作玩动画后往往会直接从potoshop粘贴过来图片,或者给元件起名字的时候起中文名称,这样在生成js文件中会产生大量的中文名字。这些中文名字有时候放到服务器上就会产生乱码,那么在createjs中引用的时候就会报错,找不到对应的动画或者元件。如果手动去修改往往会有几十设置几百个名字。所以为了节约时间可以用代码来统一修改
2. 用一个文本编辑新建一个文件(我这里用的是sublime),然后保存为rename.jsfl(当然名字你可以随便起,最好是英文,但是文件格式必须是jsfl)
- 在编辑器编辑代码,代码如下
// 获取当前文档对象
var doc = fl.getDocumentDOM();
// 获取库中的所有项目
var libraryItems = doc.library.items;
// 定义需要替换的前缀和新的前缀
var prefixMap = {
"位图 ": "flywt_", // 原来是 "位图 ",替换成 "flywt_"
"对_": "r_" // 原来是 "对_",替换成 "r_"
};
// 遍历库中的所有项目
for (var i = 0; i < libraryItems.length; i++) {
var item = libraryItems[i];
// 检查项目是否为合适的类型,例如 MovieClip 或 Bitmap
if (item.itemType === "MovieClip" || item.itemType === "Bitmap") {
// 遍历 prefixMap 替换前缀
for (var oldPrefix in prefixMap) {
if (item.name.indexOf(oldPrefix) === 0) {
// 将名称前缀替换为新的前缀
var newName = prefixMap[oldPrefix] + item.name.substring(oldPrefix.length);
item.name = newName;
fl.trace("重命名: " + item.name); // 输出重命名日志
break; // 一旦匹配替换前缀,跳出内层循环
}
}
}
}
// 输出完成信息
fl.trace("所有匹配项已重命名完成!");
这段脚本的作用是遍历 Adobe Animate (以前称为 Flash) 中当前文档的库(Library)项目,检查并替换符合条件的项目名称的前缀。使用了 prefixMap
来映射需要替换的前缀和新的前缀,同时限定了要处理的项目类型为 MovieClip
或 Bitmap
。
代码概述
-
获取当前文档对象:
var doc = fl.getDocumentDOM();
fl.getDocumentDOM()
用于获取当前打开的文档的 DOM 对象。通过该对象,你可以操作文档中的所有元素,包括库项目、时间轴元素等。 -
获取库中的所有项目:
var libraryItems = doc.library.items;
doc.library.items
返回当前文档中库的所有项目的数组。你可以通过它来访问库中的所有资源,如影片剪辑、按钮、位图等。 -
定义前缀映射 (
prefixMap
):var prefixMap = { "位图 ": "flywt_", // 将 "位图 " 替换成 "flywt_" "对_": "r_" // 将 "对_" 替换成 "r_" };
使用一个对象
prefixMap
存储多个前缀替换规则。每个键(如"位图 "
)代表需要匹配的旧前缀,值(如"flywt_"
)是替换为的新前缀。 -
遍历库中的项目:
for (var i = 0; i < libraryItems.length; i++) { var item = libraryItems[i];
使用
for
循环遍历库中的所有项目(libraryItems
数组)。item
代表当前处理的库项目。 -
检查项目类型:
if (item.itemType === "MovieClip" || item.itemType === "Bitmap") {
如果库项目是
MovieClip
或Bitmap
类型,才会进行后续的重命名操作。通过item.itemType
获取项目的类型,确保只处理符合条件的类型。 -
替换前缀:
for (var oldPrefix in prefixMap) { if (item.name.indexOf(oldPrefix) === 0) { var newName = prefixMap[oldPrefix] + item.name.substring(oldPrefix.length); item.name = newName; fl.trace("重命名: " + item.name); break; } }
- 遍历
prefixMap
中的所有旧前缀。 - 使用
item.name.indexOf(oldPrefix) === 0
检查当前项目名称是否以某个前缀开始。 - 如果是,将该前缀替换为对应的新前缀。通过
item.name.substring(oldPrefix.length)
去掉旧前缀部分,并拼接上新的前缀。 fl.trace()
用于输出重命名日志,显示每个重命名的项目名称。break
语句用于在匹配并重命名后跳出内部循环,避免重复替换。
- 遍历
-
输出完成信息:
fl.trace("所有匹配项已重命名完成!");
当所有项目都处理完成后,输出
"所有匹配项已重命名完成!"
提示操作完成。
可能的扩展
-
支持更多前缀映射:
如果你需要支持更多的前缀替换,可以直接在prefixMap
中添加新的前缀和对应的替换值,例如:var prefixMap = { "位图 ": "flywt_", "对_": "r_", "按钮_": "btn_" };
-
处理更多项目类型:
目前脚本只处理了MovieClip
和Bitmap
类型。如果需要处理其他类型的库项目,可以扩展类型检查:if (item.itemType === "MovieClip" || item.itemType === "Bitmap" || item.itemType === "Button") {
-
避免重命名冲突:
如果有需要避免重复命名冲突(例如两个项目的名称本来就相同),可以在重命名前检查是否已存在相同名称的项目。如果需要,做一些名称冲突处理。
运行环境
此脚本是在 Adobe Animate(Flash)中运行的 JSFL 脚本,JSFL(JavaScript Flash)是 Adobe Animate 的脚本语言,用于自动化和自定义 Flash 文档的操作。
执行
- 打开Adobe Animate
- 菜单栏找到命令=》运行命令
- 在软件的输出信息栏看到“所有匹配项已重命名完成!”成功