About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Dec

    31

    以下所有代码为在 Flash 开发环境的编译器中测试,任何时候都不要只相信编译器和除错器给出的提示,虽然它们大多数情况下是正确的。

    //下面这个代码,好像没问题,但又好像哪里有问题。注意两个加号和数字分别都没连在一起的
    trace( + + 1);//1,事实上编译器将它解释成(+(+1)),编译后只有1,没有前面的两个加号
    trace(1 + + );//语法错误这是肯定的 - -

    //这看起来很奇怪,但AS编译器认为它是合法的,会将后一个加号在编译时自动去掉
    trace(1 + + 1);//2,事实上它会被解释成 1 + (+ 1),编译后为 1 + 1
    trace("1" + + 1);//11,事实上它会被解释成 "1" + (+ 1),编译后为 "1" + 1

    //下一行是无法通过编译的,但它会给出一个更奇怪的转换失败提示
    //1067: String 类型值的隐式强制指令的目标是非相关类型 Number。
    trace("1" + + "1");//所以相信自己的知识和经验,不要只相信除错器和编译器给出的提示,因为别人也有错的时候

    Dec

    31

    05 年 Adobe 收购 Macromedia 之后的半年左右 Flash 版本语言 ActionScript2 升级至 ActionScript3 ,并且发布了 Flex2 和 FlashPlayer 8.5 测试版本的发布——支持性能更高的虚拟机、全新的事件流机制、更为健全的安全规则、第一个实现E4X机制的语言等等,都让 Flash 开发者们为之一振。 这门曾经在 2009 年 12 月的 《Tiobe 编程语言热门度指数排行榜》上排名在 50 名开外的 ActionScript 语言一路小跑到第18 名,然而随着近几年移动设备开发不断的升温,Flash 又错过了先机,它的排名又跌至 50 名开外。

    也许桌面设备中的普及率真的让它成为了幸运儿,微软 IE10/11内置了 Flash 播放器,Google 浏览器内置了 Flash 播放器,全球两个最大的浏览器开发商集成了 Flash 播放器,这已经意味着  Flash 播放器成为了桌面设备必不可少的运行时环境了(连以安全和稳定性著称的 JAVA 和微软自己公司的 Silverlight 都没有这个待遇)。甚至有开发者在 2013 年 08 月的程序员《编程语言平均收入排行榜》调查时,居然发现 AS3 它第一名。

    已经几经波折的 ActionScript3,为何迟迟没有发布 ActionScript4 ?

    事实上早在 08 年时从鼎鼎大名的 Colin Moock (《ActionScript 3.0编程精髓》一书的作者)的博客中就已经看过该信息,并且已经在那时就在拟草 ECMAScript4 的新标准了,而 ECMAScript4 将成为 ActionScript4 的标准,但是数年过去之后我们并没有等来 ActionScript4 和 AVM3,我们等来的是 FlashPlayer 10,11,11.1,11.2……11.9,而现在12 版本也已经有了测试版本,相信不久的将来很快会有正式版本了。

    事实上我们正在使用的是并不是 AS3,而是AS3+,我们会看到在 ECMAScript4 中包含了很多新数据类型,像 JSON,Vector,Stage3D 等等(有些甚至不存在于 ECMAScript4 中,ASer 如果第一次看到泛型语法时可能会觉的很奇怪),而这些正是在 FP 10,11,11.1,11.2……的新版本中不断的加入。可以这么说 AS3 并没像 C# 那样因为增加了一些新类和新的语言元素而从1.0升到2.0,然后又增加了一些新类和新的语言元素升到了3.0 和 4.0,相反 AS 并没有因此而修改版本号,因为这些类虽然是全新的,但仍然运行于 AVM2 中,所以其实可以称它们为 AS3+,但不是 AS4。

    不少人说网页上的 Flash 动画变少了,或 Flash 的广告变少了,可是他们没有发现网页游戏、视频、虚拟实验/实现、多媒体演示、在线应用、图表数据展现、虚拟宠物/社区等等变多了,杀鸡何必用牛刀:)

    Dec

    31

    function xmlTagsToLowerCase(xml:XML):XML {
     
     xml.setName(xml.name().toString().toLowerCase());
     
     for each (var attribute:XML in xml.@*) {
      attribute.setName(attribute.name().toString().toLowerCase());
     }
     
     for each (var child:XML in xml..*) {
      
      if (child.nodeKind() == "element") {
       
       child.setName(child.name().toString().toLowerCase());
       
       for each (attribute in child. @ *) {
        attribute.setName(attribute.name().toString().toLowerCase());
       }
      }
     }
     return xml;
    }
    var xml:XML = xmlTagsToLowerCase(new XML("<A C='D'><B>test</B></A>"));
    trace(xml);
    //Output: <a c="D"><b>test</b></a>

    Dec

    31

    AS3 换行符的陷井:\n 会变成 \r

    • 0 Comments
    • Flash Platform
    var t:TextField = new TextField()
    t.text = "Hello\nworld";// 或Hello\newlineworld
    trace(t.text.indexOf("\r"))// 5
    trace(t.text.indexOf("\n"))// -1

    到目前的 CS6 版本为止,一直是这样,程序员可能有 50% 以上的时间在处理文本字符串。所以无论是字符串处理,或在 TextField 文本域中的 text 属性里,在处理 \n 时需小心这个陷井,因为它会变成 ASCII 13(即 \r )。

    Dec

    30

    //样例代码为Windows简体中文系统默认12号字体
    var field:TextField = new TextField();
    field.height = field.width = 100;
    field.border=true;
    field.width = 100;
    field.height = 58;
    field.wordWrap = true;
    field.text = "古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客古树悬叶的博客";
    addChild(field);

    文本字符度量度信息是单个的个体信息,它所映射的就是单个字符的轮廓外形,文本渲染引擎(系统的文本渲染引擎或 Flash 矢量文本渲染引擎)都只能渲染以单个字符为最小单位的字符轮廓,不能渲染半个字符。就像单个的像素点个体信息,对应屏幕上一个点,没有半个像素这样的概念。所以 TextField (文本域)对象中的显示文本在上下滚动时它总是以行的方式滚动的。

    如果一定要实现,可以通过其它一定的技式来实现,比如使用一个文本域相同大小的位图数据对象 + 一个舞台外不可见的文本域,然后 draw 成位图后即可使用遮罩只显示半行的字符;或使用其它技巧实现。

    Dec

    30

    var hasAIR: ProductManager = new ProductManager("airappinstaller");
    trace(hasAIR.installed);

    ProductManager 在 Adobe 官方开发工具 Flash 或 Flex 中并不会有代码提示,但不会影响它的编译和使用(它在官方工具中是一个隐藏类,但在 FlashDevelop 会有这个类的代码提示)。

    Dec

    30

    在函数或方法内明明可以使用 const 定义常量,但编译器会自动将它转换成 var 定义的变量(可以通过反编译验证),所以局部常量的语法只对编译期有效,在运行期它仍然是变量,自然运行效率也不会有区别(比如在类似C#这样的语言中,根本连编译期的局部定义的常量概念也没有,常量只能用于类级别的定义)。

    Dec

    27

    **Hint**:Please login before customizing the component!
    **提示**:定制组件之前请先登录!
    打开 URL 'http://www.activeflash.net/fcl/license/serial_no.asp'时出错
    **Error**:Cannot connect server,please retry later!
    **错误**:无法连接到服务器,请稍候再试!

    出现以上错误时的解决方法。

    More...

    Dec

    24

    IT语录(三)

    • 0 Comments
    • Miscellaneous

    业精于勤而荒于嬉,行成于思而毁于随。

    Dec

    24

    每一门语言都有自己的优点和缺点,不管是现在还是将来,都不会出现一种完美的语言、框架、机制、模式能满足所有开发的需求。在 Flash 开发者相关的论坛经常会讨论类似这样的问题“除了ActionScript ,还应该学习的另一门语言是什么”。我先给出我的答案是——Objective-c,然后再来描述一下原因:

    More...