About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • 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的修正方法并不决定于开发人员使用的推迟时间长短,而是决定于使用的方法。