flash與遊戲筆記:滾動數字(2)

來源:互聯網
上載者:User

      除了copy 像素的辦法,還有一種是beginfillBitmap的做法來填充我們想要的資料,現在提供另外一種方法做一個簡單實驗。

     第一種方式是繼承bitmap ,第二種方式是先把位元影像裁剪後再拼合,代碼方面有一些區別,實驗的功能基本上可以達到想要的效果,至於效能那個好還要多做測試。

  bitmap copy像素效率比較高,相對而言多少會增大一點記憶體,而使用shape 結合tweenlite 來使用,記憶體增加速度也有一點,不知道是不是錯覺。

 在這個方面也可以嘗試去做更加實驗,最近比較忙碌,想寫部落格做實驗時間都變得少了。

 好吧,有興趣可以玩玩。

 

測試的代碼,其中nums 為素材

package{import flash.display.Sprite;import com.greensock.TweenLite;import com.greensock.plugins.TweenPlugin; import com.greensock.plugins.EndArrayPlugin; import flash.events.MouseEvent;import flash.events.Event;public class Main extends Sprite{private var rollText:RollTextField;public function Main(){TweenPlugin.activate([EndArrayPlugin]);rollText=new RollTextField();addChild(rollText);rollText.x=200;rollText.y=200;rollText.init(new nums(0,0),10);stage.addEventListener(MouseEvent.CLICK,onClick); addEventListener(Event.ENTER_FRAME,onRender);}private function onRender(event:Event):void{rollText.text=Math.random()*5000;//removeEventListener(Event.ENTER_FRAME,onRender);}private function onClick(event:MouseEvent):void{rollText.rollText=Math.random()*5000;}}}

package  {import com.greensock.TweenLite;import com.greensock.plugins.*;import flash.display.Bitmap;import flash.display.BitmapData;import flash.display.Shape;import flash.geom.Matrix;import flash.geom.Point;import flash.geom.Rectangle;import flash.utils.Dictionary;import flash.display.Sprite; public class RollTextField extends Shape{private var source:BitmapData;private var w:Number;private var h:Number;private var rect:Rectangle;private var pt:Point;private var curValue:int = 0; private var offX:int = 0; private var bitmapData:Dictionary;private var matrix:Matrix;public var filterArr:Array = ["+","-"];public var endFun:Function;public function ArtTextField(){ }/** * @param source 一個數位資源(0123456789) * @param len 裁剪的長度,預設為資源數位長度   * @param offX 圖片數位位移,有時候資源是帶符號 +0123456789 或者-0123456789 ,如果不需要位移則預設為0 */public function init(source:BitmapData,len:int,offX:int=0):void{this.source = source;this.offX = offX;w = source.width / len;h = source.height;bitmapData=new Dictionary();if (! rect){rect = new Rectangle(0,0,w,h);}if (! pt){pt=new Point();}if (! matrix){matrix=new Matrix();}for (var i:int=0; i<len; i++){var bit:BitmapData = new BitmapData(w,h,true,0x00ffffff);rect.x = i * w;rect.width = w;rect.height = h;bit.copyPixels(source,rect,pt);bitmapData[i] = bit;}}public function set text(value:int):void{if (! source || value == curValue){return;}this.curValue = value;this.graphics.clear();var myNewStr:String = String(value);var len:int = myNewStr.length;for (var i:int=0; i<len; i++){var num:int = 0;if (filterArr.indexOf(myNewStr.charAt(i)) == -1){//過濾數組num = int(myNewStr.charAt(i)) + offX;}if (bitmapData[num]){matrix.tx = i * w;this.graphics.beginBitmapFill(bitmapData[num],matrix,false);this.graphics.drawRect(i*w,0,w,h);this.graphics.endFill();}}}public function dispose():void{for each (var bit:BitmapData in bitmapData){bit.dispose();bit = null;}}public function set rollText(value:int):void{if (! source || value == curValue){return;}var myArray:Array = [curValue];this.curValue = value;TweenLite.to(myArray, 1, {endArray:[value],onUpdate:onUpdateView,onComplete:onComplete});function onUpdateView():void{text = myArray[0];}function onComplete():void{if (endFun!=null){endFun.apply(null,null);}}}}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.