2011年6月16日 星期四

flash.utils 套件__getTimer()函數

getTimer()函數
public function getTimer():int
這個方法會傳回自從 ActionScript 3.0 (AVM2) 的 Flash 執行階段虛擬機器啟動後的毫秒數。
getTimer()函數


1000615_getTimer.swf




import flash.display.MovieClip;
import flash.text.TextFormat;
import flash.text.TextField;
import fl.controls.UIScrollBar;
import fl.controls.ScrollBarDirection;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.ui.Mouse;

var vScrollBar:UIScrollBar;
this.createUIScrollBar();
this.setInfoTF();

var startTime1:Number = getTimer();
trace(this.startTime1);

click.buttonMode = true;
click.addEventListener(MouseEvent.CLICK,clickHandler);

function clickHandler(event:MouseEvent):void {
trace(getTimer()-this.startTime1);
this.addInfo(getTimer()-this.startTime1);

/*強制捲軸立即更新其捲動屬性。 - 重要,否則捲軸拖曳Bar會不見*/
this.vScrollBar.scrollPosition = this.vScrollBar.maxScrollPosition;
trace("this.vScrollBar.scrollPosition : " + this.vScrollBar.scrollPosition);
this.vScrollBar.update();
return;
}

/*設置info動態文字欄位屬性*/
function setInfoTF():void {
var format:TextFormat = new TextFormat();
format.color = 0xFFFFFF;
format.size = 24;
this.info.selectable = true;
this.info.wordWrap = true;
/*autoSize屬性不能開, 否則捲軸會不正常*/
/*this.info.autoSize = TextFieldAutoSize.LEFT;*/
this.info.setTextFormat(format);
this.info.defaultTextFormat = format;
return;
}

/*附加字串至TextField 欄位目前字串之後*/
function addInfo(_obj:*):void {
this.info.appendText(_obj.toString() + "\n");
return;
}

/*初始定義UIScrollBar屬性*/
function createUIScrollBar():void {
this.vScrollBar = new UIScrollBar();
this.vScrollBar.direction = ScrollBarDirection.VERTICAL;
this.vScrollBar.scrollTarget = info;
this.vScrollBar.move(info.x + info.width + 10, info.y);
this.vScrollBar.height = info.height;
this.addChild(this.vScrollBar);
return;
}

2011年6月10日 星期五

亂數取值存入陣列_Array.sort()方法排序(Array.NUMERIC常數、Array.DESCENDING常數)

sort(... args):Array
對陣列中的元素進行排序。
※此例, 亂數產生100個數字, 存入陣列, 採用Array.sort()方法排序.
※Array.NUMERIC常數 : 將陣列元素視為數值,且預設為升冪排序.
※Array.DESCENDING常數 : 降冪排序.

1000608_Array.sort.swf


package {

 import flash.display.MovieClip;
 import flash.text.TextFormat;
 import flash.text.TextField;
 import fl.controls.UIScrollBar;
 import fl.controls.ScrollBarDirection;
 import flash.events.MouseEvent;
 import flash.events.Event;
 import flash.ui.Mouse;

 public class ArraySort_1000608 extends MovieClip {

  private var figureArr:Array;
  private var vScrollBar:UIScrollBar;

  public function ArraySort_1000608() {
   this.init();
   this.addMouseEvent();
   return;
  }

  private function init():void {
   this.vScrollBar = new UIScrollBar();
   this.createUIScrollBar();
   return;
  }

  private function addMouseEvent():void {
   this.newRandomArrayBtn.buttonMode = true;
   this.newRandomArrayBtn.addEventListener(MouseEvent.CLICK,this.iniRandomArray);
   this.sortArrayNumericBtn.buttonMode = true;
   this.sortArrayNumericBtn.addEventListener(MouseEvent.CLICK,this.sortArrayNumeric);
   this.sortArrayDescendingBtn.buttonMode = true;
   this.sortArrayDescendingBtn.addEventListener(MouseEvent.CLICK,this.sortArrayDescending);
   return;
  }

  /*亂數取值100次*/
  private function iniRandomArray(event:MouseEvent):void {
   this.figureArr = new Array();
   for (var i:uint=0; i<100; i++) {
    this.getRandomValue();
   }
   this.showInfo();
   return;
  }

  /*亂數取值, 存入陣列*/
  private function getRandomValue():void {
   var newFigure:uint = Math.ceil(Math.random() * 1000);
   this.figureArr.push(newFigure);
   return;
  }

  private function sortArrayNumeric(event:MouseEvent):void {
   if(this.figureArr != null){
    /*將元素視為數值, 且升冪排序 - Array.NUMERIC ; 將元素視為數值,且預設升冪排序*/
    this.figureArr.sort(Array.NUMERIC);
    this.showInfo();
   }
   return;
  }

  private function sortArrayDescending(event:MouseEvent):void {
   if(this.figureArr != null){
    /*將元素視為數值, 且降冪排序 - Array.DESCENDING : 降冪排序*/
    this.figureArr.sort(Array.NUMERIC | Array.DESCENDING);
    this.showInfo();
   }
   return;
  }

  private function showInfo():void {
   trace(figureArr + "\n**************************************************");
   addInfo(figureArr + "\n**************************************************");
   /*強制捲軸立即更新其捲動屬性。 - 重要,否則捲軸拖曳Bar會不見*/
   this.vScrollBar.scrollPosition = this.vScrollBar.maxScrollPosition;
   trace("this.vScrollBar.scrollPosition : " + this.vScrollBar.scrollPosition);
   this.vScrollBar.update();
   return;
  }

  /*設置info動態文字欄位屬性*/
  private function setInfoTF():void {
   var format:TextFormat = new TextFormat();
   format.color = 0x000000;
   this.info.selectable = true;
   this.info.wordWrap = true;
   /*autoSize屬性不能開, 否則捲軸會不正常*/
   /*this.info.autoSize = TextFieldAutoSize.LEFT;*/
   this.info.setTextFormat(format);
   this.info.defaultTextFormat = format;
   return;
  }

  /*附加字串至TextField 欄位目前字串之後*/
  private function addInfo(_obj:*):void {
   this.info.appendText(_obj.toString() + "\n");
   return;
  }

  /*初始定義UIScrollBar屬性*/
  private function createUIScrollBar():void {
   this.vScrollBar = new UIScrollBar();
   this.vScrollBar.direction = ScrollBarDirection.VERTICAL;
   this.vScrollBar.scrollTarget = info;
   this.vScrollBar.move(info.x + info.width + 10, info.y);
   this.vScrollBar.height = info.height;
   this.addChild(vScrollBar);
   return;
  }
 }

}



適用於 Adobe® Flash® Platform 的 ActionScript® 3.0 參考
最上層 - Array - sort()方法

2011年6月9日 星期四

AS3中Object的資料類型

Object 資料類型

摘自上述 Adobe HELP 網址(學習 ActionScript 3.0 > ActionScript 語言和語法 > 資料類型 > Object 資料類型)
ActionScript 3.0 版 Object 資料類型的不同之處包含以下三方面:
第一,Object 資料類型不再是指定給沒有類型註釋之變數的預設資料類型;
第二,Object 資料類型不再包含 undefined 值,過去這是 Object 實體的預設值;
第三,在 ActionScript 3.0 中,Object 類別之實體的預設值是 null。

在舊版 ActionScript 中,沒有類型註釋的變數會自動指定為 Object 資料類型;而在 ActionScript 3.0 中已非如此,現在 ActionScript 3.0 包含真正不具類型變數的概念。沒有類型註釋的變數現在會視為不具類型。若要讓程式碼的讀者清清楚楚地知道,您是刻意要讓變數保持為不具類型,則可以使用類型註釋的星號 (*) 符號,這個符號等於省略類型註釋。

只有不具類型的變數可以存放 undefined 值。若嘗試將 undefined 值指定給具有資料類型的變數,執行階段會將 undefined 值轉換為該資料類型的預設值。例如 Object 資料類型 (預設值為 null),表示如果您嘗試將 undefined 指派為 Object 實體,則值會轉換成 null。

*******************************************************************************

以下簡例 :

var obj1:Object;
trace(obj1);//null

var obj2:Object = undefined;
trace(obj2);//null

var any1:*;
trace(any1);//undefined

var any2;
trace(any2);//undefined

2011年6月8日 星期三

深度交換_DisplayObjectContainer.swapChildrenAt()

swapChildrenAt(index1:int, index2:int)
在子清單的兩個指定索引位置,替換子物件的 z 順序 (深度階層,由前至後順序)。
UIScrollBar
UIScrollBar.scrollPosition = UIScrollBar.maxScrollPosition;
scrollPosition : 會取得或設定目前的捲動位置,並更新縮圖的位置。
maxScrollPosition : 會取得或設定代表最高捲動位置的數字。
UIScrollBar.update();
會強制捲軸立即更新其捲動屬性。

※此例, 點擊舞台,透過 swapChildrenAt()方法, 物件bbb與ccc交換深度,右邊TextField文字欄位info會呈現bbb與ccc深度上下順序. (文字欄位中, 先trace低索引, 再trace高索引)
※UIScrollBar捲軸被附加綁定到info文字欄位上,當字串資料超出欄位底部,捲軸將持續捲至捲動最大值位置並更新畫面,以便閱讀最新字串訊息.

1000608_displayObjectContainer.swapChildrenAt.swf


import fl.controls.UIScrollBar;
import fl.controls.ScrollBarDirection;

var vScrollBar:UIScrollBar = new UIScrollBar();
this.setInfoTF();
this.createUIScrollBar();

trace("this.numChildren : " + this.numChildren);
this.addInfo("this.numChildren : " + this.numChildren);
this.getSpriteIndex();

this.stage.addEventListener(MouseEvent.MOUSE_DOWN,swap);
function swap(event:MouseEvent):void {
 /*深度交換*/
 this.swapChildrenAt(this.getChildIndex(bbb),this.getChildIndex(ccc));
 trace("****************");
 this.getSpriteIndex();
}

/*取得為Sprite類別物件且不為UIScrollBar 的實體*/
/*UIScrollBar 繼承自Sprite → UIScrollBar →ScrollBar →UIComponent →Sprite*/
function getSpriteIndex():void {
 for (var i:uint=0; i < this.numChildren; i++) {
  if (this.getChildAt(i) is Sprite && !(this.getChildAt(i) is UIScrollBar)) {
   trace("索引 " + i + " : " + this.getChildAt(i).name);
   addInfo("索引 " + i + " : " + this.getChildAt(i).name);
  }
 }
 addInfo("**************");
 /*強制捲軸立即更新其捲動屬性。 - 重要,否則捲軸拖曳Bar會不見*/
 this.vScrollBar.scrollPosition = this.vScrollBar.maxScrollPosition;
 trace(this.vScrollBar.scrollPosition);
 this.vScrollBar.update();
 return;
}

/*設置info動態文字欄位屬性*/
function setInfoTF():void {
 var format:TextFormat = new TextFormat();
 format.color = 0x000000;
 this.info.selectable = true;
 this.info.wordWrap = true;
 /*autoSize屬性不能開, 否則捲軸會不正常*/
 /*this.info.autoSize = TextFieldAutoSize.LEFT;*/
 this.info.setTextFormat(format);
 this.info.defaultTextFormat = format;
 return;
}

/*附加字串至TextField 欄位目前字串之後*/
function addInfo(_obj:*):void {
 this.info.appendText(_obj.toString() + "\n");
 return;
}

/*初始定義UIScrollBar屬性*/
function createUIScrollBar():void{
 this.vScrollBar = new UIScrollBar();
 this.vScrollBar.direction = ScrollBarDirection.VERTICAL;
 this.vScrollBar.scrollTarget = info;
 this.vScrollBar.move(info.x + info.width + 10, info.y);
 this.vScrollBar.height = info.height;
 this.addChild(vScrollBar);
 return;
}

交換深度_DisplayObjectContainer.swapChildren()

swapChildren(child1:DisplayObject, child2:DisplayObject):void

替換兩個指定子物件的 z 順序 (深度階層,由前至後順序)。

※簡單實例:點擊舞台stage, 舞台上兩物件ccc與bbb交換深度

1000608_displayObjectContainer_1.swf


this.stage.addEventListener(MouseEvent.MOUSE_DOWN,swap);
function swap(event:MouseEvent):void{
this.swapChildren(ccc,bbb);
}