浏览模式: 标准 | 列表
10月
26

Base64 for ActionScript 3.0

Base64 for ActionScript 2.0 的代码在 PHPRPC Client for ActionScript 2.0 中已经包含了,下面是 for ActionScript 3.0 的代码,与 for ActionScript 2.0 相比,3.0 版本编码的内容和解码后的内容是 ByteArray 类型的数据,速度得到的大幅的提升,并且对非文字编码的字节流支持的更好(例如对加密的字节流编码)。这个版本的使用更类似于 Java 版本

» 阅读全文

PHP 序列化和反序列化的 for ActionScript 2.0 的代码在 PHPRPC Client for ActionScript 2.0 中已经包含了,下面是 for ActionScript 3.0 的代码,与 for ActionScript 2.0 相比,3.0 版本序列化后的内容是 ByteArray 类型的数据,序列化过程中编码转化直接通过 ByteArray 来完成,速度得到的大幅的提升,另外,增加了对自定义动态类对象类型的序列化和反序列化支持。

» 阅读全文

在 JavaScript 和 ActionScript 3.0 中,String.fromCharCode(0,0).length 的值是 2,但是在 ActionScript 2.0 中,它的值是 0。也就是说,ASCII 码为 0 的字符被 ActionScript 2.0 当成了字符串结束的标志字符(这跟 C 中的字符串处理倒是差不多)。

» 阅读全文

Adobe Flash CS3 的 Auto-format 存在严重的 Bug,它会去掉你的表达式中的括号,这样很可能使你的程序中表达式的运算优先级变得跟你写的优先级不同。

今天写 PHPRPC for ActionScript 3.0 的 MD5 程序时,就遇到了这个问题。程序是从 ActionScript 2.0 改写过来的,基本上没做什么修改,就是把类的定义部分改成了 AS3 的写法,另外,把 Number 类型改成了 int 类型(加速了很多),最后将 add32 那个函数直接去掉,换成了系统的加法运算(因为 int 类型可以保证溢出的正确处理),做完这些后,点了一下 Auto-format 按钮,格式化了一下代码。然后在调试程序,发现跟 AS2 的运行结果不同了,开始以为 AS2 的版本有问题,然后又跟 JavaScript 的版本对比了一下结果,发现 JavaScript 的运行结果跟 AS2 版本一致,跟 AS3 版本不同,这样就说明错误发生在 AS3 版本上了。于是就以为是那些优化出了问题。没办法,只好把 AS2 的核心代码原封不动的粘贴到 AS3 中,因为没有对齐,所以我就又点了一下 Auto-format 按钮。之后运行测试程序,发现跟原来错误的 AS3 程序结果还是一样。于是有以为 AS3 的数字运算本身有问题,于是把用到的加、减、位移、与或非等运算单独测试,发现也没有什么问题。最后,实在没有办法,在JavaScript 和 ActionScript 3.0 两个版本中都进行单步跟踪,看是在那步出了问题,最后定位在 ii 函数上,定位到 ii 函数一看,终于被我找到了问题,原来,ii 函数中的表达式被改写了,原表达式是:

ActionScript代码
 
  1. private static function ii(a:int, b:int, c:int, d:int, x:int, s:int, t:int):int {   
  2.     return cmn(c ^ (b | (~d)), a, b, x, s, t);   
  3. }  

居然被改写成了下面这样:

ActionScript代码
 
  1. private static function ii(a:int, b:int, c:int, d:int, x:int, s:int, t:int):int {   
  2.     return cmn(c ^ b | ~ d, a, b, x, s, t);   
  3. }  

这个改写让本来先或后与,变成了先与后或,结果当然就完全不同了。

看来再好用的工具也不能太依赖它,否则,它有 Bug 你不知道的话,你就会被它害惨!

» 阅读全文

 

ActionScript代码
 
  1. a[i++] &= 0xffff;  

上面这个语句,在 as2 中的行为跟 js 或 php 的完全不同。在 as2 中它的行为居然是:

ActionScript代码
 
  1. a[i++] = a[i++] & 0xffff;  

就因为这个 bug,害我在调试 PHPRPC for AS2 版本时花了 2 天的时间。不知道 as3 是否也有这个 bug。

ActionScript 中还有好多跟 JavaScript 相同的语法,但语义不同的情况。例如向 +=,-= 这种自反赋值运算符所构成的表达式居然在 ActionScript 是没有值的,而在 JavaScript 中它的值跟运算符左面最后的结果相同。

以后写程序看来确实应该避免使用这种副作用了。

» 阅读全文