About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Dec

    26

    FLEX 字符串换行方式

    • 1 Comments
    • Flash Platform

    FLEX 同时支持 MXML 语言与 AS3 ,换行符本身是一个特殊符号,所以需要用其它方式来表示。如 MXML 语言中需要实体编码方式,而在AS3中需要用到转义字符。

    MXML 标签中的实体编码为:&#xd;

    AS3中的转义字符为:\r或\n(注:AS3中已经没有了 newline 常量)。

    Dec

    23

    Adobe Flash Player for Android

    • 0 Comments
    • Flash Platform

    Android 移动版本 Adobe Flash Player:https://market.android.com/details?id=com.adobe.flashplayer

    Dec

    22

    当在MXML语言中使用花括号调用类成员时的一个规则:类属性成员、get与set成员需要[Bindable] 元标签,并且会监视其相应变化;类方法成员本身不需要使用[Bindable] 元标签,但也不会监视方法成员内部被使用到过的属性成员、get与set成员的变化。

    如下样例代码:createFullName()方法定义时不需要使用[Bindable] 元标签,但当btn按扭点击时如果改变了firstName类属性成员的值,它并不会反应到lab实例的text属性中。

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
    <![CDATA[
    [Bindable]
    public var firstName:String = "11";
    public var lastName:String = "99" ;
    public function createFullName():String{
    return firstName + " " + lastName;
    }
    ]]>
    </mx:Script>
    <mx:Label id="lab" x="80" y="103" text="{createFullName()}"/>
    <mx:Button id="btn" x="85" y="144" label="Button" click="firstName='22';"/>
    </mx:Application>

    More...

    Dec

    19

    Dec

    8

    Flash无论是ActionScript2或3编程,它的刷新渲染方式都是基于帧的渲染,很多闪客ASer都认为这是导致Flash编程执行效率低下的主要原因。但本人也在这里提出一种看法,即:很多Flash的BUG也是基于这种帧刷新的方法产生的(个人认为 Flash ActionScript2/3 是一种“邪恶”的编程语言)。 

    Stage.scaleMode = "noScale";
    Stage.align = "TL";
    //生成红色按扭用于切换全屏与窗口
    var square_mc:MovieClip = createEmptyMovieClip("square_mc", getNextHighestDepth());
    square_mc.beginFill(0xFF0000);
    square_mc.moveTo(10,10);
    square_mc.lineTo(100,10);
    square_mc.lineTo(100,100);
    square_mc.lineTo(10,100);
    square_mc.lineTo(10,10);
    square_mc.endFill();
    square_mc.onRelease = function() {
     Stage.displayState = (Stage.displayState == "normal" ? "fullScreen" : "normal");
    };
    //注销以下这一段将在FLASH的一些新版本中产生BUG
    /*var myListener:Object = new Object();
    myListener.onResize = function() {
     Stage.align = "TL";
     onEnterFrame = function () {
      Stage.align = "TL";
      if (Stage.align == "TL") {
       delete onEnterFrame;
      }
     };
    };
    Stage.addListener(myListener);*/

    //TXT用于显示舞台宽度
    var txt:TextField = createTextField("txt", getNextHighestDepth(), 100, 100, 100, 100);
    //实时检测舞台大小
    square_mc.onEnterFrame = function() {
     txt.text = String(Stage.width);
    };

    这样的BUG是否“邪恶”?解决像这类BUG的方法,就是使用延迟并重置属性,如使用setTimeout 或 onEnterFrame等。还有一些像AS3的主类为外部文件类时,在初始化时也会产生类似的BUG,可以通过这种延迟方法解决。像 setSelectColor 方法也许并不常用,但 TextSnapshot 类在正常使用的情况下,唯有这个类中的 setSelectColor 方法经常不能正常使用,也可以通过延迟的方法来解决。

    注:1、AS2 中使onEnterFrame 后需要 delete 将它删除。AS3中使用Event.ENTER_FRAME事件后需要使用相应的 addEventListener 取消侦听器。2、Flex中的一些框架组件有时候用Event.ENTER_FRAME的延迟并不一定能修正这个BUG,这时候可以试试setTimeout ,哪怕它的时间延迟设定的是0.001秒。这说明有些BUG的修正方法并不决定于开发人员使用的推迟时间长短,而是决定于使用的方法。

    Dec

    6

    一旦使用了 Embed 标签将 swf 嵌入到了 SWFLoader 组件中,就无法再使用 Flex 帮助文件中写的 content 属性去引用被嵌入的 SWF 文件。这时 content 属性引用的是一个 flash.display.Loader 对象(并且为私有对象)。需通过getChildAt(0)取到这个 loader 对象的引用,然后再通过 loader 对象的 content 属性引用被嵌入的SWF文件。

    即被嵌入的SWF为以下引用:swfLoader.content.getChildAt(0).content