package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFormat; import flash.utils.getTimer; [SWF(width="1201", height="631", frameRate="60", backgroundColor="#FFFFFF")] public class FlashTextTest extends Sprite { [Embed(source="fonts/Champignon.ttf", fontFamily="Champignon", mimeType="application/x-font-truetype")] public static const CHAMPIGNON:String; [Embed(source="fonts/Starjedi.ttf", fontFamily="Starjedi", mimeType="application/x-font-truetype")] public static const STARJEDI:String; public function FlashTextTest(){ stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; createChildren(); init(); } private var fps:TextField; private var results:TextField; private var draw:Sprite; private var meter:FPSMeter; private var english:String = "Curabitur quis neque quis lacus mollis laoreet vitae eget dolor. Curabitur sodales, diam eget viverra volutpat, nibh ligula tincidunt magna, quis ornare nibh metus vitae dui. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse viverra felis non\n"; private var russian:String = "Очередь заведено создаете те про, джоэл должен написано вы всю. Получаете отказаться программистов миф мы, не пишете размере количества нее, по две заведено безостановочно? Ещё то этой вреде внешних, люсита автора принадлежите мы опа. Ну эти всегда образование\n"; private var japanese:String = "せっかく見つけたすばらしい記事がどこにあったか忘れてしまった経験はありますか ならタイトルとアドレスだけでなく、訪問したウェブページのコンテンツからも検索することができます。せっかく見つけたすばらしい記事がどこにあったか忘れてしまった経験はありますか ならタイトルとアドレスだけでなく、訪問したウェブページのコンテンツからも検索することができます。訪問したウェブページのコンテンツからも検索することができます。せっかく見つけたすばらしい記事がどこにあったか忘れてしまった経験はありますか ならタイトルとアドレスだけでなく、訪問\n"; private var textblock1:TextField; private var textblock2:TextField; private var textblock3:TextField; private var textblock4:TextField; private var textblock5:TextField; protected function init():void{ textblock1 = createColumnField(0, 0, 200, 300, "Champignon"); textblock1.text = concatStr(english, 60); draw.addChild(textblock1); textblock2 = createColumnField(0, 300, 200, 300, "Starjedi"); textblock2.text = concatStr(english, 60); draw.addChild(textblock2); textblock3 = createColumnField(200, 0, 800, 600, "_sans"); textblock3.text = concatStr(english, 60); draw.addChild(textblock3); textblock4 = createColumnField(1000, 0, 200, 300, "_sans"); textblock4.text = concatStr(russian, 60); draw.addChild(textblock4); textblock5 = createColumnField(1000, 300, 200, 300, "_sans"); textblock5.text = concatStr(japanese, 60); draw.addChild(textblock5); meter = new FPSMeter(); addEventListener(Event.ENTER_FRAME, processFrame); } protected function createColumnField(x:Number, y:Number, width:Number, height:Number, font:String):TextField { var txt:TextField = new TextField(); if(font != "_sans"){ txt.embedFonts = true; } txt.multiline = true; txt.wordWrap = true; txt.border = true; txt.x = x; txt.y = y; txt.width = width; txt.height = height; txt.defaultTextFormat = new TextFormat(font, 14, 0x000000); return txt; } protected function concatStr(str:String, num:int):String { var out:String = str; var i:int=0; while(i < num){ out += str; i++; } return out; } private var expand:Boolean = true; private var expandwidth:Number = 200; protected function processFrame(evt:Event):void{ if(expand){ expandwidth++; if(expandwidth == 400){ expand = false; } }else{ expandwidth--; if(expandwidth == 200){ expand = true; } } textblock1.width = expandwidth; textblock2.width = expandwidth; textblock3.width = 1200-(expandwidth*2); textblock3.x = expandwidth; textblock4.width = expandwidth; textblock4.x = 1200-expandwidth; textblock5.width = expandwidth; textblock5.x = 1200-expandwidth; updatePerformance(); } protected function updatePerformance():void { meter.increment(); fps.text = "Current "+meter.getFramerate()+" fps"; if(testRunning){ continueTest(); } } private var testBegin:int = 0; private var testData:Array = []; private var testRunning:Boolean = false; private function startTest(evt:MouseEvent):void{ testBegin = getTimer(); testRunning = true; testData = []; results.text = "Running..." } private function continueTest():void{ var time:uint = getTimer(); testData.push(time); if(time-testBegin > 10000){ testRunning = false; var output:Number = testData.length/(time-testBegin)*1000; results.text = "Test Average: "+FPSMeter.formatNumber(output)+" fps"; } } private function createChildren():void { var header:Sprite = new Sprite(); header.graphics.beginFill(0xC0C4DF); header.graphics.drawRect(0,0,1200,30); addChild(header); var title:TextField = createTextField("GUIMark - Text Column Test"); title.width = 300; title.x = 4; header.addChild(title); var button:Sprite = createButton(); button.x = 320; button.y = 7; button.addEventListener(MouseEvent.CLICK, startTest); header.addChild(button); fps = createTextField(""); fps.width = 140; fps.x = 405; header.addChild(fps); results = createTextField(""); results.width = 300; results.x = 555; header.addChild(results); draw = new Sprite(); draw.x = 0; draw.y = 30; addChild(draw); //draw.graphics.beginFill(0xFFFFFF); draw.graphics.drawRect(0, 0, 1200, 600); } private function createTextField(val:String):TextField { var txt:TextField = new TextField(); txt.y = 6; txt.defaultTextFormat = new TextFormat("Arial", 15, 0x000000, true); txt.text = val; return txt; } private function createButton():Sprite { var buttonText:TextField = new TextField(); buttonText.x = 7; buttonText.y = 1; buttonText.width = 63; buttonText.height = 18; buttonText.defaultTextFormat = new TextFormat("Arial", 12, 0x000000); buttonText.text = "Start Test"; buttonText.mouseEnabled = false; var button:Sprite = new Sprite(); button.graphics.beginFill(0xDDDDDD); button.graphics.lineStyle(2, 0x999999); button.graphics.drawRoundRect(0,0,70,18,15); button.buttonMode = true; button.addChild(buttonText); return button; } } } import flash.utils.getTimer; class FPSMeter { private var sampleFPS:Number = 0; private var lastSampledTime:uint = 0; private var sampleFrames:Number = 0; public var sampleDuration:uint = 500; public function increment():void { sampleFrames++; } public function getFramerate():Number { var diff:uint = getTimer()-lastSampledTime; if(diff >= sampleDuration){ var rawFPS:Number = sampleFrames/(diff/1000); sampleFPS = FPSMeter.formatNumber(rawFPS); sampleFrames = 0; lastSampledTime = getTimer(); } return sampleFPS; } public static function formatNumber(val:Number):Number{ //format as XX.XX return Math.floor(val*100)/100; } }