Seven Yu @ 01/09/2010 (12:15 am)

利用 jsfl 批量重命名 Flash IDE 库中元件 (依据上级文件夹名)

Tags: , , ::

最近一直在折腾 flash lite 项目, 每次导入从美工那拿来的新素材都很杯具, 因为总是遇到重名元件 (你知道, 在美工那元件名永远都是 Symbol 1, 2, 3... )

为了解决这一问题, 凭记忆找到了一篇 用 jsfl 随机命名 Flash 库中的所有元件 的文章 (来自: 杜增强.COM ), 效果不错, 用法简单 (详见原文).

但是, 但咱做程序员的, 多少都有那么点洁癖, 看着 library 里一堆以随机数命名的元件始终是不舒服.
于是动手改造了一下, 让元件依据父级文件夹来命名, 并添加后缀, 源码如下:

PLAIN TEXT >> JAVASCRIPT:
  1. (function()
  2. {
  3.     var tmpdata = {};
  4.     var folder_cnt = 0, file_cnt = 0;
  5.     var items = fl.getDocumentDOM().library.items;
  6.     var prex =
  7.     {
  8.         'movie clip': 'mc',
  9.         'button': 'btn',
  10.         'graphic': 'gc',
  11.         'bitmap': 'img',
  12.         'sound': 'snd',
  13.         'compiled clip': 'com'
  14.     };
  15.  
  16.     for(var i in items)
  17.     {
  18.         var obj = items[i];
  19.         var pathinfo = obj.name.split('/');
  20.         var realname = pathinfo.pop();
  21.         var realpath = pathinfo.join('/') || '_G_L_O_B_A_L_';
  22.         var myfolder = pathinfo.pop() || 'nofolder';
  23.         var id = tmpdata[realpath] || 1;
  24.  
  25.         if(obj.itemType !== 'folder')
  26.         {
  27.             var pre = prex[obj.itemType] || 'uk';
  28.             obj.name = myfolder + '_' + id + '_' + pre;
  29.             tmpdata[realpath] = ++id;
  30.             file_cnt++;
  31.         }
  32.         else
  33.         {
  34.             folder_cnt++;
  35.         }
  36.     }
  37.     fl.trace('Rename completed!\n' + folder_cnt + ' folder(s) and ' + file_cnt + ' symbol(s)');
  38. })();

保存为 rename.jsfl 文件, 执行 flash 菜单中 Commands -> Run Command... 项, 选择 rename.jsfl 文件打开即可.

效果如图:
jsfl_rename

Seven Yu @ 12/10/2009 (12:38 pm)

escape, encodeURI 和 encodeURIComponent 的区别

Javascript 中有三个 URI 编码函数, 他们都是全局函数, 但功能稍有不同, 这里简单解释下他们之间的区别:

encodeURI 只将 URI 中的空格和非 AscII 字符进行编码, 编码后的 URI 能正常访问.
encodeURIComponent 除了将所有非 AscII 字符编码外, 还会将一些特殊字符进行编码 (如 ?, &, /, :, # 等), 编码后的 URI 不可访问.
一般要将字符串作为 get 参数传递或保存为 Cookie 的, 都需要使用 encodeURIComponent 编码.

escape 的功能与 encodeURIComponent 的功能一样, 只是个别字符的差异, 对使用没有影响.
但 escape 方法已经在 ECMAScript v3 标准中被删除了, 所以不推荐使用.

对应的解码函数为 unescape, decodeURI 和 decodeURIComponent.

附上测试脚本:

PLAIN TEXT >> JAVASCRIPT:
  1. var url = 'http://labs.phpz.org/jstest/null.html?a=TEST1&b=hello world#'
  2. var results = ['URI: ' + url]
  3. // escape
  4. results.push('escape: ' + escape(url));
  5. // encodeURI
  6. results.push('encodeURI: ' + encodeURI(url));
  7. // encodeURIComponent
  8. results.push('encodeURIComponent: ' + encodeURIComponent(url))
  9. document.write(results.join('<br />'));
  10.  
  11. /*
  12. URI: http://labs.phpz.org/jstest/null.html?a=TEST1&b=hello world#
  13. escape: http%3A//labs.phpz.org/jstest/null.html%3Fa%3DTEST1%26b%3Dhello%20world%23
  14. encodeURI: http://labs.phpz.org/jstest/null.html?a=TEST1&b=hello%20world#
  15. encodeURIComponent: http%3A%2F%2Flabs.phpz.org%2Fjstest%2Fnull.html%3Fa%3DTEST1%26b%3Dhello%20world%23
  16. */

Seven Yu @ 11/15/2009 (1:42 pm)

如何在 flash lite 1.1 中监听日本手机的上下键

这里讨论的手机特指日本最大的手机厂商中的两家: au (KDDI) 和 docomo (i-mode).

这两种手机中的上下键对应 PC 中的 Tab 和 Shift Tab 操作, 左右键用来访问浏览器的历史记录 (另外一家手机厂商 SoftBank 中支持 4 方向键)

但是, 在 flash lite 1.1 中是无法监听 Shift Tab 键的, 这个问题困扰了我很久, 因为日本手机用户习惯了上下键加确定键的简单操作, 所以对于一般的应用来说上下键的支持是最基本的.

但既然不能直接监听就只能想其他方法了. 开发过程中我们观察到上下键可以切换焦点, 正如 PC 中的 Tab 和 Shift Tab 的功能一样, 可以正向或反向循环切换焦点, 浏览器中切换链接的焦点, flash lite 中则可以切换场景中按钮的焦点 (注意这里特别指出是场景中的按钮, 场景外的按钮无法获得焦点)

当按钮获得焦点时会触发 rollOver 事件, 这样在场景中放三个按钮, 再利用一个标识变量就可以判断焦点循环的方向, 从而监听到用户的上下键操作了.

由于场景外的按钮不参与焦点的获取, 所以可以把其他键盘监听代码写到场景外的一个按钮上, 这样代码比较清晰, 方便管理. 但这样做也有一个潜在的问题, 就是当用户手机屏幕过宽的情况下, 有可能键盘监听按钮会进入场景, 这样获取焦点的顺序就被扰乱了, 解决方法有两个:

  1. 去掉场景外的按钮, 把键盘监听事件写在场景中三个按钮的任意一个上;
  2. 把按键监听按钮的 x 坐标设置得足够大, 手机屏幕总不会有 1:20 比例的吧 ╮(╯_╰)╭

原理很简单, 具体实现详见源文件: 源文件下载

还有很重要的一点需要注意:
在 flash lite 1.1 , 2.0 甚至很多更高版本中 (甚至 SoftBank 的 flash lite 3.0 中) 都不允许自动发送网络请求 (即 LoadMovie, LoadVariables 或 getURL 之类的操作), 这种请求必须在用户执行按键操作的时候才允许发送 (keyPress, keyDown, keyUp 事件), 而且每一次按键只能发送一条请求, 其他不合法的或连续的网络请求都将被忽略. 因此本文提到的 rollOver 模拟的上下键监听是不能发送网络请求的, 所以最好的解决方案是用 2 8 4 6 和 5 等数字键作为上下左右确定键的替身, 来实现同样的功能.

补充:

希望本文对您的 flash lite 开发有所帮助, 如有遗漏和错误之处欢迎指正. 谢谢 :D

Seven Yu @ 11/14/2009 (1:18 pm)

如何设置日本手机文本框默认输入模式

Tags: , , ::

日本手机中有好几种输入模式, 包括平假名, 片假名, 英文 和 数字, 根据上下文自动开启对应的输入模式无疑可以极大提高用户体验, 下面就是关于该问题的针对日本三大手机厂商的解决方案:

au(KDDI), docomo(i-mode) 利用 "istyle" 属性, 对应值:

属性值 Mode 1
(kana input mode)
Mode 2
(pager message input mode)
1 Full-size kana Full-size characters
2 Half-size kana Half-size characters
3 Alphabetic Half-size characters
4 Numeric Half-size characters
PLAIN TEXT >> HTML:
  1. <input type="text" istyle="4" />

SoftBank 使用 "mode" 属性, 对应值:

属性值 含义
hiragana 全角ひらがな
katakana 全角カタカナ
hankakukana 半角カタカナ
alphabet 英字
numeric 数字
PLAIN TEXT >> HTML:
  1. <input type="text" mode="numeric" />

参考网址:

BTW: 最近在公司忙一个日本 flash lite 项目, 如果有时间我会将项目中遇到的一些问题, 难点和小技巧等总结出来, 发布到这里 :D 如有错误, 欢迎指正, 谢谢.

Seven Yu @ 08/23/2009 (11:46 pm)

Wordcamp China 2009 上使用的大屏幕程序

Tags: , , , , ::

又是一届 Wordcamp China 大会, 这次除了依然是志愿者外, 偶还有幸为大会制作了大屏幕程序.

虽然只是个简单的 html 页面, 但看上去效果还蛮酷的 :razz:

大屏幕

原理也很简单, 就是利用 Twitter Search API 搜索固定的几个 tag, 定时自动更新.

下面是该程序的地址, 用了 jQuery 框架, 要下载直接另存即可 (该版本与 wcc09 上使用的稍有不同, 增加了两个可设置项).

http://labs.phpz.org/wcc2009.html

另外还由此衍生了一个 TwitterBot 工具, 可以作为 widget 嵌入任何页面.

这还有个生成 TwitterBot widget 的工具, TwitterBot Kit.

以上所有程序都可以随意下载, 修改和传播, 请尽量保留作者信息.

注: 由于某些原因, 你可能暂时无法访问 Twitter , 但 Twitter 是无处不在的, 你可以寻找可用代理 API 添加至 Search API 处

~Enjoy~

Seven Yu @ 08/03/2009 (11:13 am)

[Upgrade] Adobe Flash Player 10.0.32.18

Adobe Flash Player 更新至 10.0.32.18

各平台最新 flash player debug 版下载: http://www.adobe.com/support/flashplayer/downloads.html

查看 flash player 版本信息:

  1. http://www.playerversion.com/
  2. http://www.flashplayerversion.com/

Seven Yu @ 07/19/2009 (3:53 pm)

WP Plugin: BS IE

Tags: , , ::

搞了一个 Wordpress 插件 --- BS IE (见下图, 点这里下载)

如果访问者用 IE 浏览器则会显示 "The Site DOES NOT SUPPORT IE" 的提示, 并有其他优秀浏览器的链接.

注: 启用该插件后, IE 用户只能看到下图中的内容, 不会显示其他任何内容, 如果希望缓和点的, 可以去掉代码中的 exit();

BS IE

Next Page »