forked from: 電光掲示板的なものをつくりたい

by hacker_q4ift_ht forked from 電光掲示板的なものをつくりたい (diff: 2)
アニメーション用の設定
♥0 | Line 91 | Modified 2010-05-17 19:31:11 | MIT License
play

ActionScript3 source code

/**
 * Copyright hacker_q4ift_ht ( http://wonderfl.net/user/hacker_q4ift_ht )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/sDKI
 */

// forked from 7kamura's 電光掲示板的なものをつくりたい
package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.GradientType;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Matrix;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    
    // アニメーション用の設定
    [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="10")]
    public class Main extends Sprite {
    		private var bmd:BitmapData;
    		private var tfld:TextField;
    		private var frameCount:int;
    		private var source:Sprite;
        public function Main() {
        		if(stage)
        			init();
        		else
        			addEventListener(Event.ADDED_TO_STAGE, init);
        }
        public function init(e:Event = null):void {
        		removeEventListener(Event.ADDED_TO_STAGE, init);
        		
        		source = new Sprite();
        		
        		tfld = new TextField();
        		tfld.background = true;
        		tfld.backgroundColor = 0x000000;
        		tfld.autoSize = TextFieldAutoSize.LEFT;
        		tfld.height = 20;
        		tfld.text = "silicon";
        		var tfmt:TextFormat = new TextFormat();
        		tfmt.size = 15;
        		tfmt.color = 0x0000FF;
        		tfmt.letterSpacing = 1;
     		tfld.setTextFormat(tfmt);
        		        		
        		// source.addChild(tfld);
        		
        		// 文字のピクセルが入ったbitmapDataを用意
        		bmd = new BitmapData(tfld.width, tfld.height);
        		bmd.draw(tfld);
        		// アンチエイリアスにより薄くなっている部分は表示しないように閾値(今回は0x000040以上で表示)を決める
        		for(var y:int; y<bmd.height; y++) {
        			for (var x:int; x<bmd.width; x++) {
        				var color:uint = bmd.getPixel(x,y);
        				if(color >= 0x000040)
        					bmd.setPixel(x,y,0xFF);
        				else
        					bmd.setPixel(x,y,0x00);
        			}
        		}
        		
        		// とりあえずテキストフィールドを画面上に表示する
        		addChild(source);
        		
        		frameCount = -31;
        		addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
        
        public function enterFrameHandler(e:Event):void {
        		// 端まで行ったらframeCountを初期化
        		frameCount++;
        		if(frameCount > bmd.width )
        			frameCount = -45;
        		
        		graphics.clear();
        		
        		for(var y:int=0; y<21; y++) {
        			for(var x:int=0; x<45; x++) {
        				var pixel:int;
        				if(x + frameCount < 0 || x + frameCount > bmd.width-1)
        					pixel = 0;
        				else
        					pixel = bmd.getPixel(x + frameCount, y);
        				
        				// ドットを描写(10, 40)を原点
        				if(pixel != 0)
        					drawDot(10 + x*10, 40 + y*10, 5, 0xF00000, 0x800000);
        				else
        					drawDot(10 + x*10, 40 + y*10, 5, 0x600000, 0x400000);
        			}
        		}	
        }
        
        public function drawDot(x:int, y:int, size:int, colorLight:int, colorDark:int):void {
        		var colors:Array = [colorLight, colorDark];
            var alphas:Array = [1.0, 1.0];
            var ratios:Array = [0, 255];
            var matrix:Matrix = new Matrix();
            matrix.createGradientBox(size * 2, 
                                     size * 2, 
                                     0,
                                     x - size,
                                     y - size);
            
            graphics.lineStyle();
            graphics.beginGradientFill(GradientType.RADIAL, 
                                        colors,
                                        alphas,
                                        ratios,
                                        matrix);
            graphics.drawCircle(x, y, size);
            graphics.endFill(); 
        }
    }
}