Forked from: hikipuro's 2009-3-12 電光掲示板 diff:44 3D表示 forked from: 2009-3-12 電光掲示板 電光掲示板のテスト Kay forked:5favorite:3lines:96license : All rights reserved modified : 2009-03-12 16:10:19 Embed Tweet // forked from hikipuro's 2009-3-12 電光掲示板 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="400", height="400", backgroundColor="0x000000", frameRate="24")] public class Main extends Sprite { // 電光掲示板をSpriteにまとめる private var panel:Sprite; /** * 文字列のピクセルを入れるビットマップデータ */ private var data:BitmapData; /** * 1 フレーム経過するごとに一定量ずつ値を足す * スクロール値に使用 */ private var frameCount:int; /** * 電光掲示板に表示する内容が入ったテキストフィールド */ private var textField:TextField; /** * テキストフィールドのピクセルを取得する時に使うスプライト */ private var sourceSprite:Sprite; /** * コンストラクタ */ public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); panel = new Sprite(); addChild(panel); panel.rotation = 20; panel.rotationY = -25; panel.rotationX = -25; } /** * 初期化イベント * @param e */ private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point // スプライトの初期化 sourceSprite = new Sprite(); textField = new TextField(); textField.autoSize = TextFieldAutoSize.LEFT; textField.height = 20; textField.background = true; textField.backgroundColor = 0xC0C0C0; textField.x = -1; textField.y = -2; textField.text = "電光掲示板のテスト 3Dにするとカッコイイ"; var format:TextFormat = new TextFormat(); format.color = 0; format.size = 15; textField.setTextFormat(format); // スプライトにテキストフィールドを登録 sourceSprite.addChild(textField); // 文字のピクセルが入ったビットマップデータを準備 data = new BitmapData(textField.width, 16); data.draw(sourceSprite); // テキストフィールドを画面に表示する addChild(sourceSprite); // 初期スクロール値を設定 frameCount = -31; // フレーム開始イベントの登録 addEventListener(Event.ENTER_FRAME, onEnterFrame); } /** * フレーム開始イベント * @param event */ private function onEnterFrame(event:Event):void { // フレーム数のカウント frameCount++; // 文字列サイズを超えたら初期値にする if (frameCount > data.width) frameCount = -31; // 画面に描かれた内容をいったんクリア panel.graphics.clear(); for (var y:int = 0; y < 16; y++) { for (var x:int = 0; x < 71; x++) { var pixel:uint; // 表示範囲を超えていたら強制的に OFF if (x + frameCount < 0 || x + frameCount > data.width - 1) pixel = 1; else pixel = data.getPixel(x + frameCount, y); if (pixel == 0) drawDot(10 + x * 10, 40 + y * 10, 4.5, 0xFF0000, 0x800000); else drawDot(10 + x * 10, 40 + y * 10, 4.5, 0x600000, 0x400000); } } } /** * 点を描く * @param x 点の中心の X 座標 * @param y 点の中心の Y 座標 * @param size 点の大きさ * @param colorLight 明るい場所の色 * @param colorDark 暗い場所の色 */ private function drawDot(x:Number, y:Number, size:Number, colorLight:uint, colorDark:uint):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); panel.graphics.lineStyle(); panel.graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, matrix); panel.graphics.drawCircle(x, y, size); panel.graphics.endFill(); } } } Code Fullscreen Preview Fullscreen kazy hikipuro hacker_wfcn4.. : bannieredefilantdiagonalrougestring banniere defilant diagonal rouge string size width Event.ADDED_TO_STAGE stage rotation rotationX addEventListener rotationY removeEventListener height TextFormat createGradientBox Matrix addChild color text Array Event.ENTER_FRAME uint Event sort new page view favorite forked pv234 DotMatrix BillBoard Text Testi.. bradsedito forked:0 favorite:0lines:110 (diff:91) pv404 forked from: 3D表示 forked from.. hacker_ciaxk5up forked:0 favorite:3lines:96 (diff:2) pv276 forked from: 3D表示 forked from.. RBN forked:0 favorite:0lines:96 (diff:1) pv340 forked from: 3D表示 forked from.. RBN forked:0 favorite:0lines:96 (diff:3) pv0 forked from: 3D表示 forked from.. daWei forked:0 favorite:0lines:96 (diff:1)