FlashPlatform Initialization

来自Blueidea
跳转至: 导航搜索

Flash platform 應用初始化常用設置。


舞台尺寸的軟匹配:

此示例識別舞台大小的修改並始終以一個藍色背景填充。

package {
  import flash.display.Shape;
  import flash.display.Sprite;
  import flash.display.StageAlign;
  import flash.display.StageScaleMode;
  import flash.events.Event;
 
  // ${1}
  /**
   * The <code>Test</code> class.<br/>
   */
  public class Test extends Sprite {
    //==========================================================================
    //  Constructor
    //==========================================================================
    /** Constructor */
    public function Test() {
      stage.align = StageAlign.TOP_LEFT;
      stage.scaleMode = StageScaleMode.NO_SCALE;
      // 待會用來填充舞台。
      $border = new Shape();
      addChild($border);
      // 初始時先繪製一次。
      repaintBorder(stage.stageWidth, stage.stageHeight);
      // 監聽舞台大小的改變。
      stage.addEventListener(Event.RESIZE, stage_resizeHandler);
    }
    private var $border:Shape;
    private function repaintBorder(width:uint, height:uint):void {
      // ${2}
    }
    //==========================================================================
    //  Event listeners
    //==========================================================================
    private function stage_resizeHandler(event:Event):void {
      repaintBorder(stage.stageWidth, stage.height);
    }
  } // <- end class ->
}

通常我們會對stage做如上設定讓舞台在左上角對齊,並且當FlashPlayer尺寸設置時令縮放保持不變。

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;


接下來對FlashPlayer設定一個初始大小。如果您使用的Flash IDE那麼直接在設置面板設置即可。 如果您使用的時Flash Builder那麼可以在${1}處加入使長寬為900 x 600並指定60fps刷新率。

// ${1}
[SWF(width="900", height="500", frameRate="60")]

最後在舞台尺寸改變時重新繪製邊框。

// ${2}
$border.graphics.clear();
$border.graphics.beginFill(0x00CCFF);
$border.graphics.drawRect(0, 0, width, height);
$border.graphics.endFill();

如果您操作無誤完成如上設定後會看見以下畫面。

FlashPlatform InitStage.png


stage軟獲取

假設這個類的swf被另外一個swf所加載。那麼一定會悲劇。

package {
  import flash.display.Sprite;
  import flash.display.StageAlign;
  import flash.display.StageScaleMode;
  /**
   * The <code>Test</code> class.<br/>
   */
  public class Test extends Sprite {
    //==========================================================================
    //  Constructor
    //==========================================================================
    /** Constructor */
    public function Test() {
      stage.align = StageAlign.TOP_LEFT;
      stage.scaleMode = StageScaleMode.NO_SCALE;
    }
  } // <- end class ->
}

使用stage引用的軟獲取。可以有效避免悲劇和蛀牙的發生。

package {
  import flash.display.Sprite;
  import flash.display.StageAlign;
  import flash.display.StageScaleMode;
  import flash.events.Event;
 
  /**
   * The <code>Test</code> class.<br/>
   */
  public class Test extends Sprite {
    //==========================================================================
    //  Constructor
    //==========================================================================
    /** Constructor */
    public function Test() {
      addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
    }
    //==========================================================================
    //  Event listeners
    //==========================================================================
    private function addedToStageHandler(event:Event):void {
      removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
      stage.align = StageAlign.TOP_LEFT;
      stage.scaleMode = StageScaleMode.NO_SCALE;
    }
  } // <- end class ->
}

限定顯示範圍

你並不需要給stage指定mask 只需要

stage.scrollRect = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);