如何用jsfl来写个遍历fla檔中所有文本的程序?
时间:2009-06-09
来源:互联网
作者: QWEASZ 发布时间: 2009-06-09
作者: JoesonWong 发布时间: 2009-06-09
引用:
原帖由 JoesonWong 于 2009-6-9 14:45 发表用C写个了 放DLL里 然后用JSFL调用
DLL怎么用,还请JoesonWong君给指点下了。我是直接学习的as所以对其他的不怎么懂了.谢谢!!
作者: QWEASZ 发布时间: 2009-06-09

作者: QWEASZ 发布时间: 2009-06-10
作者: JoesonWong 发布时间: 2009-06-10
作者: HSZZLZL 发布时间: 2009-06-10
引用:
原帖由 HSZZLZL 于 2009-6-10 16:43 发表直接生成swf后 用闪客精灵打开 浏览文本那里 可以整段复制出来的
但我更想比如搜一个字符"我们的家乡",搜到后替换成"我们的国家",
如果是单个的话,用flash自己的搜素与取代就可以了,但我想批量的操作,比如让它可以读取一个xml档,根据xml批量转换。
作者: QWEASZ 发布时间: 2009-06-10
引用:
原帖由 QWEASZ 于 2009-6-10 17:00 发表我刚试了,发现生成好多的文本的,也可以。
但我更想比如搜一个字符"我们的家乡",搜到后替换成"我们的国家",
如果是单个的话,用flash自己的搜素与取代就可以了,但我想批量的操作,比如让它可以读取一个xml档,根据x ...
作者: HSZZLZL 发布时间: 2009-06-10
引用:
原帖由 HSZZLZL 于 2009-6-10 17:05 发表其实就是操个DOM结构罢了 你看看帮助吧 反正我感觉上应该不难
基本思路:
提供一个字符“XX”,然后在文中搜索所有有这个字符的部分.
作者: QWEASZ 发布时间: 2009-06-10
代码:
var lib = fl.getDocumentDOM().library;for(var i in lib){
for(var j in lib[i]){//遍历所有库元件
if(lib[i][j].itemType=="graphic"||lib[i][j].itemType=="movie clip"){//判断,只有图形元件和影片元件里含有文本
for(var k in lib[i][j].timeline.layers){//遍历图层
for(var n in lib[i][j].timeline.layers[k].frames){//遍历所有帧
for(var m in lib[i][j].timeline.layers[k].frames[n].elements){//遍历所有帧里的可视元素
if(lib[i][j].timeline.layers[k].frames[n].elements[m] == "[object Text]"){//只有文本才执行下面的操作
if(lib[i][j].timeline.layers[k].frames[n].elements[m].getTextString()=="我们的家乡"){//获取你需要操作的字符
lib[i][j].timeline.layers[k].frames[n].elements[m].setTextString("我们的国家");//替换字符
}
}
}
}
}
}
}
}
[ 本帖最后由 libins 于 2009-6-11 11:04 编辑 ]
作者: libins 发布时间: 2009-06-11
作者: QWEASZ 发布时间: 2009-06-11
但刚看了下发现如果文本是在Group中的话,就没有办法获取了,
我刚trace了下.(

fl.trace(lib[i][j].timeline.layers[k].frames[n].elements[m]);
结果:
[object Text]
function (keya, keyb) {
var comparisonFunction = function (a, b) {var ta = a[keya];var tb = b[keya];if (ta < tb) {return -1;}if (ta > tb) {return 1;}var tc = a[keyb];var td = b[keyb];if (tc < td) {return -1;}if (tc > td) {return 1;}return 0;};
this.sort(comparisonFunction);
}
[object Shape]
function (keya, keyb) {
var comparisonFunction = function (a, b) {var ta = a[keya];var tb = b[keya];if (ta < tb) {return -1;}if (ta > tb) {return 1;}var tc = a[keyb];var td = b[keyb];if (tc < td) {return -1;}if (tc > td) {return 1;}return 0;};
this.sort(comparisonFunction);
}
除了[object Text]以外就是[object Shape]了,
在用lib[i][j].timeline.layers[k].frames[n].elements[m].isGroup发现是个Group,
遍历了下里面的东东:
结果如下:
false
shape
true
false
0
0
159.95000000000002
38
[object Object]
2
[object Layer]
true
后面窝也遍历了下,没有发现text了,是不是我方法不对还是Group中文本确实没有办法找到了?
作者: QWEASZ 发布时间: 2009-06-11
作者: libins 发布时间: 2009-06-11
for (var g in lib[i][j].timeline.layers[k].frames[n].elements[m]){
if(lib[i][j].timeline.layers[k].frames[n].elements[m][g] =="[[object Text]
){
dosomething.
}
}
作者: QWEASZ 发布时间: 2009-06-11
{
fl.trace(lib[i][j].timeline.layers[k].frames[n].elements[m][g] );
//以下是輸出結果:
/*shape
true
false
0
0
23
20
[object Object]
2
[object Layer]
true
*/
if(lib[i][j].timeline.layers[k].frames[n].elements[m][g] =="[[object Text]")
{
dosomething.
}
}
我把那个组给遍历了下,在输出结果页没有[object Text],但事实上文本确实在组里面。
不知道是不是我的方式不对?ibins斑竹,麻烦在给指点下。谢谢!!
作者: QWEASZ 发布时间: 2009-06-12
(..elements[m] =="[object Shape]"&&..elements[m]==isGroup)
上面就是判断了,只有图形并且是组的话,才执行后面的遍历
for(var w in ...elements[m].contours)//contours就是返回这个组里的对象的个数了
var item = ....elements[m][w]; //这个东西很奇怪了。。如果这样定义的话,它回对组里的情况判断,如果是shape就返回shape,不是的话就返回false了
所以我们就对item判断了,因为是要取text,所以
if(item!="shape")
如果执行到这里了,就是我们需要的对象了,可是item是false。。。你可以考虑换个访问方式去读这个对象,elements[m].contours[w]这个返回的是Contour 对象,具体你可以看帮助了,它有好多种对象返回的类型,但是貌似都不能返回Text类型,转型操作的话,JSFL里好像不支持。。所以你自己思考下吧

还有你做这个的用途是什么?如果是希望JSFL来弄的话,最好是有一定规律的,否则都是白费,因为fla里的图形结构本来就多,你弄了组,万一又嵌套组。。呵呵,就麻烦了
作者: libins 发布时间: 2009-06-12
{
fl.trace(lib[i][j].timeline.layers[k].frames[n].elements[m].isGroup);
//true;
if (lib[i][j].timeline.layers[k].frames[n].elements[m].isGroup)
{
for (var s in lib[i][j].timeline.layers[k].frames[n].elements[m].contours)
{
fl.trace(lib[i][j].timeline.layers[k].frames[n].elements[m].contours[s]);
//輸出結果:
/*
function (keya, keyb)
{
var comparisonFunction = function (a, b) {var ta = a[keya];var tb = b[keya];if (ta < tb) {return -1;}if (ta > tb)
{return 1;}var tc = a[keyb];var td = b[keyb];if (tc < td) {return -1;}if (tc > td) {return 1;}return 0;};
this.sort(comparisonFunction);
}
*/
}
}
}
輸出結果是:
function (keya, keyb)的东西,
没有对象返回的类型了。
我见flash自身的搜索与取代,我随便把文本放到好几层的组里面,仍旧可以搜索出来。感觉蛮神奇的。可惜自己目前在程序方面,也只是对flash as有所了解了。通过斑竹的指点,我感觉通过讨论,再自己实践。这两天对flash扩展这方面的东西,明显的认识提高了。非常感谢,湘农斑竹的耐心解答了。
对于目前这个我只是个想法,只是打算如果可以提出文本的话,想文本进行批量的设置了。
作者: QWEASZ 发布时间: 2009-06-12
fl.trace(lib[i].timeline.layers[k].frames[n].elements[m])
//結果為[object Text];
fl.trace(lib[i].timeline.layers[k].frames[n].elements[m].elementType)
//結果為undefinded;
var text_str = lib[i].timeline.layers[k].frames[n].elements[m].getTextString();
fl.trace(text_str);
//出現警告: lib[i].timeline.layers[k].frames[n].elements[m].getTextString() is not a function;
可實際上我裏面上的確實有text的.這種情況是在下麵這段腳本執行好幾次后就出現;之前是正確的;
代码:
var lib = fl.getDocumentDOM().library.items;for (var i in lib) {
//遍历所有库元件
if (lib[i].itemType == "graphic" || lib[i].itemType == "movie clip") {
//判断,只有图形元件和影片元件里含有文本
for (var k in lib[i].timeline.layers) {
//遍历图层
for (var n in lib[i].timeline.layers[k].frames) {
//遍历所有帧
for (var m in lib[i].timeline.layers[k].frames[n].elements) {
//遍历所有帧里的可视元素
if (lib[i].timeline.layers[k].frames[n].elements[m] == "[object Text]") {
//只有文本才执行下面的操作
if (lib[i].timeline.layers[k].frames[n].elements[m].getTextString() == "我们的家乡") {
//获取你需要操作的字符
lib[i].timeline.layers[k].frames[n].elements[m].setTextString("我们的国家");//替换字符
}
}
}
}
}
}
}
查看幫助element.elementType
唯讀屬性;字串;代表指定元素的類型。此值為下面其中之一:"shape"、"text"、"instance" 或 "shapeObj"。"shapeObj" 是使用可擴充工具建立的。
但輸出結果卻為undefined; 不明白.
我也嘗試輸出其他的屬性值
fl.trace(lib[i].timeline.layers[k].frames[n].elements[m].x)
結果也是undefined;
最後得出的結果我覺得lib[i].timeline.layers[k].frames[n].elements[m]就不是element類型;
而且只有文本找不到,圖形都可以的;
爲什麽呢?是官方的bug嗎?
還試搜素腳本寫的有問題;請會用jsfl的高手給指點下了。不勝感激!!
libins斑竹再次請你幫忙在看下了! 謝謝!!
[ 本帖最后由 QWEASZ 于 2009-7-7 09:59 编辑 ]
作者: QWEASZ 发布时间: 2009-07-07
作者: HSZZLZL 发布时间: 2010-08-03
根据ls ls ls ls 不知几楼的ls 的脚本参考 自己试验了 呵呵 开心啊
每一关键帧上有一个文本框 帧与帧间隔一个F5
//fl.getDocumentDOM().getTimeline().convertToBlankKeyframes();
//http://bbs.blueidea.com/thread-2932659-1-1.html
var a = ["碘的萃取和分液","硫酸根离子的检验","配制一定物质的量浓度的溶液","丁达尔现象","离子反应的条件","NaAlO2与盐酸的反应","NaOH与氯化铝的反应","铝和盐酸、氢氧化钠的反应","铝热反应","氯化铝与NaOH的反应","钠与水的反应","钠与氧气的反应","氢氧化铝的生成和性质","碳酸钠、碳酸氢钠与盐酸反应","碳酸钠与碳酸氢钠的热稳定性","碳酸钠与碳酸氢钠的水溶性","铁的氢氧化物","铁粉与水蒸气的反应","铁盐和亚铁盐","盐酸与NaAlO2的反应","焰色反应","氨气的制取二","氨气的制取三","氨气的制取一","二氧化硫的性质","干燥的氯气能否漂白物质","海带中提取碘","氯离子的检验","氯水的漂白作用","浓硫酸与铜的反应","喷泉实验","氢气与氯气的反应","硝酸与铜的反应","蔗糖碳化现象","钾与水的反应","钾与氧气的反应","卤素单质间的置换反应","镁、铝和盐酸的反应","镁、铝与水的反应","钠与氯气的反应","氢氧化钡晶体与氯化铵晶体反应","盐酸与铝反应","盐酸与氢氧化钠反应","原电池","中和热的测定","苯的化学性质","苯的加成反应","苯的取代反应","苯的燃烧","苯的物理性质","苯的硝化反应","苯酚与氯化铁溶液的反应","苯酚与氢氧化钠的反应","苯酚与溴水的反应","蛋白质的特征反应","淀粉的特征反应","甲烷的结构","甲烷的取代反应","甲烷的实验室制备","甲烷的稳定性","甲烷的氧化反应","葡萄糖与新制氢氧化铜反应","葡萄糖与银氨溶液的反应","乙醇的催化氧化","乙醇的燃烧","乙醇与钠的反应","乙醇与重铬酸钾的反应","乙酸的酸性","乙酸的酯化反应","乙烯的加成反应","乙烯的实验室制法","乙烯的氧化反应","蔗糖的水解"];
for(var i=0;i<a.length;i++){
fl.getDocumentDOM().getTimeline().insertFrames();
//fl.getDocumentDOM().getTimeline().convertToKeyframes();
fl.getDocumentDOM().getTimeline().insertFrames();
fl.getDocumentDOM().getTimeline().currentFrame++
fl.getDocumentDOM().getTimeline().convertToKeyframes();
fl.getDocumentDOM().getTimeline().layers[0].frames[(fl.getDocumentDOM().getTimeline().currentFrame)].elements[0].setTextString(a[i])
}
作者: HSZZLZL 发布时间: 2010-10-15
作者: HBrO 发布时间: 2010-10-15
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28