這陣子一直著迷於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 } );
}
}
沒有留言:
張貼留言
我的留言版