テキスト描画テスト
/**
* Copyright tepe ( http://wonderfl.net/user/tepe )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/tl2L
*/
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.text.TextFormat;
//背景、サイズ、フレームレート
[SWF(backgroundColor="#ffffff", width="465", height="465", frameRate="60")]
// LogoGenerator クラス
public class LogoGenerator extends Sprite {
// インスタンス変数の宣言
public var scale:int=0;
private var inputText:TextField; // テキスト入力欄
private var reflection:Bitmap; // 反射効果の表示
private var preview:Sprite; // プレビュー表示
private var previewText:TextField; // プレビュー文字
private var hilight:Sprite; // 明るくするハイライト
// コンストラクタ
public function LogoGenerator():void {
// 左上に固定して拡大縮小されないよう指定
stage.scaleMode = "noScale";
stage.align = "TL";
// 各コンポーネントを初期化する
initComponents();
// 初回の描画を行う
update();
addEventListener("mouseWheel",function(event:MouseEvent):void{
//scale+=event.delta;
scale += event.delta;
update();
});
// イベント登録を行う
inputText.addEventListener("change", function(event:Event):void {
update();
});
}
// 表示オブジェクトの初期化
private function initComponents():void {
// テキスト入力欄を作成
inputText = new TextField();
inputText.border = true;
inputText.type = "input";
inputText.width = 300;
inputText.height = 18;
inputText.text = "Wonderfl";
// 反射を表示するビットマップを作成
reflection = new Bitmap();
reflection.y = 150;
// プレビュー用表示の Sprite を作成
preview = new Sprite();
preview.y = reflection.y;
// 出力用のテキストフィールドを作成
previewText = new TextField();
var tf:TextFormat = new TextFormat(); // TextFormat オブジェクトを作成
tf.size = 48+scale; // 文字サイズを 48px に変更
tf.color = 0x000000; // テキストのカラー
previewText.defaultTextFormat = tf; // TextFormat を指定
previewText.autoSize = "left";
// 明るくするハイライトを作成
hilight = new Sprite();
hilight.graphics.beginFill(0xffffff, 0.3);
hilight.graphics.drawRect(0, 0, 10, 10);
hilight.graphics.drawEllipse(0, 3, 10, 10);
hilight.graphics.endFill();
hilight.x = 2; // TextField の周りにできる2pxのマージンの分、ずらしておく
// 各パーツを追加していく
addChild(inputText);
addChild(reflection);
addChild(preview);
preview.addChild(previewText);
preview.addChild(hilight);
}
// 表示を更新する
private function update():void {
// 文字列の更新
previewText.text = inputText.text;
// 最後の1文字の色を変更する
var tf:TextFormat = new TextFormat();
//tf.color = 0xfd1e73;
tf.color = Math.random()*0x1000000;
previewText.setTextFormat(tf, inputText.text.length - 1);
// ハイライトのサイズを変更する
hilight.width = previewText.textWidth;
hilight.height = previewText.textHeight * 1.3;
updateReflection();
}
// 反射を更新する
private function updateReflection():void {
// プレビューを BitmapData に描画
var bmd:BitmapData = new BitmapData(preview.width, previewText.height * 2);
bmd.fillRect(bmd.rect, 0xffffffff);
bmd.draw(preview);
// ロゴ全体の高さを取得
var textHeight:int = bmd.getColorBoundsRect(0xffffffff, 0xffffffff, false).bottom;
// 映り込みを描画していく
for(var i:int = 0; i < textHeight; i++) {
var multiply:uint = Math.max(1, i/ textHeight * 64);
bmd.merge(bmd, new Rectangle(0, i, preview.width, 1),
new Point(0, textHeight * 2 - i + 2), multiply, multiply, multiply, 256);
}
// 反射以外を削除
//bmd.fillRect(new Rectangle(0, 0, preview.width, textHeight), 0xffffffff);
// 表示
if(reflection.bitmapData) {
reflection.bitmapData.dispose();
}
reflection.bitmapData = bmd;
}
}
}