2012年10月9日 星期二

Flash Native As3 基礎總整理(1-1)Bitmap與BitmapData

這陣子一直著迷於stage3D與Starling的世界,在告別flash原生native API之前小弟想做個這段時間所學的總整理~~ 至於為何要先從Bitmap與BitmapData開始講起..因為小弟覺得在遊戲的世界裡"點陣圖"的運用是超級重要的,尤其在 使用stage3D GPU 快速渲染的情況下只能使用點陣圖..

Bitmap是as3裡用來<顯示>點陣圖的主要類別,因為繼承了DisplayObject因此有許多DisplayObject的屬性可以用; 如x,y,alpha,scale,rotation等等..

BitmapData是用來控制Bitmap的像素資料,使用BitmapData類別的方法來建立任意調整大小的透明或不透明點陣圖影像
var myBitmap:BitmapData = new BitmapData(width:Number, height:Number, transparent:Boolean, fillColor:uinit);

//ransparent 參數會指定點陣圖資料是 (true) 否 (false) 包括 Alpha 色版。fillColor 參數是 32 位元顏色值,它會指定背景顏色及透明度值 (如果已經設定為 true)。

var myBitmap:BitmapData = new BitmapData(100, 100, true, 0xff0000);

在螢幕上顯示新建立的 BitmapData 物件,請將它指定給 Bitmap 實體,或將它包裝在 Bitmap 實體中。若要這麼做,可以將 BitmapData 物件當做 Bitmap 物件之建構函式的參數來傳遞,或是可以將它指定給現有之 Bitmap 實體的 bitmapData 屬性。

但這裡值得注意的是 " 是不是每讀一張外部圖片就需要使用一個Bitmap與一個BitmapData呢??? "答案是"NO"..

以下我寫了一個使用4張圖做一個簡單輪播demo給各位參考:


  /**
   * 多張圖輪播只需1個Bitmap+1個BitmapData;
   * ...
   * @author Ray Cheng
   */
public class Main extends Sprite 
{
  private var _aryPic:Array = new Array("c0.jpg", "c1.jpg", "c2.jpg", "c3.jpg");
  private var _loader:Loader = new Loader();
  private var _bimap:Bitmap = new Bitmap();
  private var _bimapData:BitmapData = new BitmapData(450, 340);
  private var _pivNum:uint = 0;
 
  public function Main():void 
{
  _bimap.x = 800 - 450 >> 1;
  _bimap.y = 600 - 340 >> 1;
  this.addChild(_bimap);
  stage.addEventListener(MouseEvent.CLICK, onStageClickEventHandler); 
  _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderCompleteHandler);
  _loader.load(new URLRequest(_aryPic[_pivNum])); 
}
  
private function onLoaderCompleteHandler(e:Event):void 
{
  _bimapData.draw(Loader(e.currentTarget.loader));
  _bimap.bitmapData = _bimapData;
  TweenLite.to(_bimap, .3, { alpha:1 } );
}
 
private function onStageClickEventHandler(e:MouseEvent):void 
{
  trace("onStageClickEventHandler");
  _pivNum++;
  if (_pivNum > _aryPic.length-1)_pivNum = 0;
  _loader.load(new URLRequest(_aryPic[_pivNum])); 
  TweenLite.to(_bimap, .3, { alpha:0 } );
}
}

沒有留言:

張貼留言

我的留言版