ひっと

数字を一桁ずつ画像で表示する ActionScript(AS3)

~ Flashアプリ、ゲームのためのAS3サンプルプログラム集 ~

数字を一桁ずつ画像で表示する

数字を一桁ずつ画像で表示するサンプルです。
数字を10で割りながら余りと答えを求めていくと、数字を一桁ずつ分解できます。


数字の画像ファイルです。各桁の数字に応じてcopyPixelsを行いながら得点画像を生成しています。

AS3 サンプル ソースコード


package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.text.TextField;
    
    [SWF(width="400", height="300")]
    public class FixedDigit extends Sprite
    {
        //現在の得点
        public var score:int=0;
        
        //元となる数字の画像データ0~9
        [Embed(source = './img/numbers.png')] public static var imgNumbers:Class;
        public var bmdNumbers:BitmapData = ( new imgNumbers as Bitmap ).bitmapData;
        
        //この画像に得点が書き込まれる
        public var bmpScore:Bitmap = new Bitmap( new BitmapData(16*10,32) );

        public function FixedDigit()
        {
            var t:TextField = new TextField();
            t.text="画面をクリックすると得点が1234ポイント上がるよ。\n\n↓現在の得点を10桁で表示";
            t.mouseEnabled = false;
            t.selectable = false;
            t.width = 400;
            this.addChild(t);
            
    
            bmpScore.y=50;
            this.addChild(bmpScore);
            
            this.stage.addEventListener(MouseEvent.CLICK,OnClick);
            function OnClick(e:MouseEvent):void
            {
                //得点UP
                score += 1234;
                ScoreUpdate();
            }
            ScoreUpdate();
        }
        
        public var numbers_ary:Array = new Array(0,0,0,0,0,0,0,0,0,0);
        public var source_rect:Rectangle = new Rectangle();
        public var dest_point:Point = new Point();
        //ビットマップに10桁で得点を書き込む
        public function ScoreUpdate():void
        {
            //得点の値を1桁ずつ配列に格納
            var idx:int=10-1;    
            var work:int=score;
            do {
                //10で割った余りと答えを使って1ケタずつ取り出す方法
                if( work > 0 ) {
                    numbers_ary[idx] = work % 10;
                    work = work/10;
                    idx--;
                } else {
                    numbers_ary[idx] = 0;
                    idx--;
                }

            } while ( idx >= 0 );

            //各桁の数字に応じて画像を切り出して貼り付けていく
            for(var i:int=0; i < numbers_ary.length; i++) {
                source_rect.x = 16*numbers_ary[i];
                source_rect.y = 0;
                source_rect.width = 16;
                source_rect.height = 32;
                
                dest_point.x = 16*i;
                dest_point.y = 0;
                bmpScore.bitmapData.copyPixels(bmdNumbers, source_rect, dest_point );
            }
        }
        

    }
}
目次へ
52888