📄 stats.as
字号:
package away3d.core.stats { import away3d.cameras.*; import away3d.containers.*; import away3d.core.base.*; import flash.display.Graphics; import flash.display.Sprite; import flash.events.*; import flash.geom.ColorTransform; import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; import flash.net.*; import flash.system.System; import flash.text.TextField; import flash.text.TextFormat; import flash.ui.ContextMenu; import flash.ui.ContextMenuItem; import flash.utils.*; public class Stats extends Sprite { private var totalFaces:int = 0; private var meshes:int = 0; public var scopeMenu:View3D = null; public var displayMenu:Sprite = null; public var geomMenu:Sprite = null; private var lastrender:int; private var fpsLabel:TextField; private var titleField:TextField; private var perfLabel:TextField; private var ramLabel:TextField; private var swfframerateLabel:TextField; private var avfpsLabel:TextField; private var peakLabel:TextField; private var faceLabel:TextField; private var faceRenderLabel:TextField; private var geomDetailsLabel:TextField; private var meshLabel:TextField; private var fpstotal:int = 0; private var refreshes:int = 0; private var bestfps:int = 0; private var lowestfps:int = 999; private var bar:Sprite; private var barwidth:int = 0; private var closebtn:Sprite; private var cambtn:Sprite; private var clearbtn:Sprite; private var geombtn:Sprite; private var barscale:int = 0; private var stageframerate:Number; private var displayState:int; private var camLabel:TextField; private var camMenu:Sprite; private var camProp:Array; private var rectclose:Rectangle = new Rectangle(228,4,18,17); private var rectcam:Rectangle = new Rectangle(207,4,18,17); private var rectclear:Rectangle = new Rectangle(186,4,18,17); private var rectdetails:Rectangle = new Rectangle(165,4,18,17); private var geomLastAdded:String; private var defautTF:TextFormat = new TextFormat("Verdana", 10, 0x000000); // private const VERSION:String = "2"; private const REVISION:String = "1.0"; private const APPLICATION_NAME:String = "Away3D.com"; public var sourceURL:String; private var menu0:ContextMenuItem; private var menu1:ContextMenuItem; private var menu2:ContextMenuItem; public function Stats(scope:View3D, framerate:Number = 0) { scopeMenu = scope; stageframerate = (framerate)? framerate : 30; displayState = 0; sourceURL = scope.sourceURL; menu0 = new ContextMenuItem("Away3D Project stats", true, true, true); menu1 = new ContextMenuItem("View Source", true, true, true); menu2 = new ContextMenuItem(APPLICATION_NAME+"\tv" + VERSION +"."+REVISION, true, true, true); scopeMenu.contextMenu = new ContextMenu(); scopeMenu.contextMenu.customItems = sourceURL? [menu0, menu1, menu2] : [menu0, menu2]; menu0.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, displayStats); menu1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, viewSource); menu2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, visitWebsite); scopeMenu.contextMenu.hideBuiltInItems(); } public function addSourceURL(url:String):void { sourceURL = url; scopeMenu.contextMenu.customItems = sourceURL? [menu0, menu1, menu2] : [menu0, menu2]; } //Displays stats public function displayStats(e:ContextMenuEvent):void { if(!displayMenu){ scopeMenu.statsOpen = true; generateSprite(); addEventMouse(); //applyShadow(); } } //Redirect to site public function visitWebsite(e:ContextMenuEvent):void { var url:String = "http://www.away3d.com"; var request:URLRequest = new URLRequest(url); try { navigateToURL(request); } catch (error:Error) { } } //View Source files public function viewSource(e:ContextMenuEvent):void { var request:URLRequest = new URLRequest(sourceURL); try { navigateToURL(request, "_blank"); } catch (error:Error) { } } //Closes stats and cleans up a bit... private function closeStats():void { scopeMenu.statsOpen = false; displayState = 0; scopeMenu.removeEventListener(MouseEvent.MOUSE_DOWN, onCheckMouse); scopeMenu.removeEventListener(MouseEvent.MOUSE_MOVE, updateTips); scopeMenu.removeChild(displayMenu); displayMenu = null; } //Mouse Events private function addEventMouse():void { scopeMenu.addEventListener(MouseEvent.MOUSE_DOWN, onCheckMouse); scopeMenu.addEventListener(MouseEvent.MOUSE_MOVE, updateTips); } private function updateTips(me:MouseEvent):void { if(scopeMenu != null){ var x:Number = displayMenu.mouseX; var y:Number = displayMenu.mouseY; var pt:Point = new Point(x,y); try { if(rectcam.containsPoint(pt)){ titleField.text = "CAMERA INFO"; } else if(rectclose.containsPoint(pt)){ titleField.text = "CLOSE STATS"; } else if(rectclear.containsPoint(pt)){ titleField.text = "CLEAR AVERAGES"; } else if(rectdetails.containsPoint(pt)){ titleField.text = "MESH INFO"; } else{ titleField.text = "AWAY3D PROJECT"; } } catch (e:Error) { } } } private function onCheckMouse(me:MouseEvent):void { var x:Number = displayMenu.mouseX; var y:Number = displayMenu.mouseY; var pt:Point = new Point(x,y); if(rectcam.containsPoint(pt)){ if(displayState != 1){ closeOtherScreen(displayState); displayState = 1; showCamInfo(); } else{ displayState = 0; hideCamInfo(); } } else if(rectdetails.containsPoint(pt)){ if(displayState != 2){ closeOtherScreen(displayState); displayState = 2; showGeomInfo(); } else{ displayState = 0; hideGeomInfo(); } } else if(rectclose.containsPoint(pt)){ closeStats(); } else if(rectclear.containsPoint(pt)){ clearStats(); } else{ displayMenu.startDrag(); scopeMenu.addEventListener(MouseEvent.MOUSE_UP, mouseReleased); } } private function closeOtherScreen(actual:int):void { switch(actual){ case 1: hideCamInfo(); break; case 2: hideGeomInfo(); } } private function mouseReleased(event:MouseEvent):void { displayMenu.stopDrag(); scopeMenu.removeEventListener(MouseEvent.MOUSE_UP, mouseReleased); } //drawing the stats container private function generateSprite():void { displayMenu = new Sprite(); var myMatrix:Matrix = new Matrix(); myMatrix.rotate(90 * Math.PI/180); displayMenu.graphics.beginGradientFill("linear", [0x333366, 0xCCCCCC], [1,1], [0,255], myMatrix, "pad", "rgb", 0); displayMenu.graphics.drawRect(0, 0, 250, 86); displayMenu.graphics.beginFill(0x333366); displayMenu.graphics.drawRect(3, 3, 244, 20); scopeMenu.addChild(displayMenu); displayMenu.x -= displayMenu.width*.5; displayMenu.y -= displayMenu.height*.5; // generate closebtn closebtn = new Sprite(); closebtn.graphics.beginFill(0x666666); closebtn.graphics.drawRect(0, 0, 18, 17); var cross:Sprite = new Sprite(); cross.graphics.beginFill(0xC6D0D8); cross.graphics.drawRect(2, 7, 14, 4); cross.graphics.endFill(); cross.graphics.beginFill(0xC6D0D8); cross.graphics.drawRect(7, 2, 4, 14); cross.graphics.endFill(); cross.rotation = 45; cross.x+=9; cross.y-=4; closebtn.addChild(cross); displayMenu.addChild(closebtn); closebtn.x = 228; closebtn.y = 4; // generate cam btn cambtn = new Sprite(); var cam:Graphics = cambtn.graphics; cam.beginFill(0x666666); cam.drawRect(0, 0, 18, 17); cam.endFill(); cam.beginFill(0xC6D0D8); cam.moveTo(10,8); cam.lineTo(16,4); cam.lineTo(16,14); cam.lineTo(10,10); cam.lineTo(10,8); cam.drawRect(2, 6, 8, 6); cam.endFill(); displayMenu.addChild(cambtn); cambtn.x = 207; cambtn.y = 4; // generate clear btn clearbtn = new Sprite(); var clear_btn:Graphics = clearbtn.graphics; clear_btn.beginFill(0x666666); clear_btn.drawRect(0, 0, 18, 17); clear_btn.endFill(); clear_btn.beginFill(0xC6D0D8); clear_btn.drawRect(6, 6, 6, 6); clear_btn.endFill(); displayMenu.addChild(clearbtn); clearbtn.x = 186; clearbtn.y = 4; // generate geometrie btn geombtn = new Sprite(); var geom_btn:Graphics = geombtn.graphics; geom_btn.beginFill(0x666666); geom_btn.drawRect(0, 0, 18, 17); geom_btn.endFill(); geom_btn.beginFill(0xC6D0D8, 0.7); geom_btn.moveTo(3,4); geom_btn.lineTo(11,2); geom_btn.lineTo(16,5); geom_btn.lineTo(7,7); geom_btn.lineTo(3,4); geom_btn.beginFill(0x7D8489, 0.8); geom_btn.moveTo(3,4); geom_btn.lineTo(7,7); geom_btn.lineTo(7,16); geom_btn.lineTo(3,12); geom_btn.lineTo(3,4); geom_btn.beginFill(0xC6D0D8,1); geom_btn.moveTo(7,7); geom_btn.lineTo(16,5); geom_btn.lineTo(15,13); geom_btn.lineTo(7,16); geom_btn.lineTo(7,7); geom_btn.endFill(); geom_btn.endFill(); displayMenu.addChild(geombtn); geombtn.x = 165; geombtn.y = 4; // generate bar displayMenu.graphics.beginGradientFill("linear", [0x000000, 0xFFFFFF], [1,1], [0,255], new Matrix(), "pad", "rgb", 0); displayMenu.graphics.drawRect(3, 22, 244, 4); displayMenu.graphics.endFill(); bar = new Sprite(); bar.graphics.beginFill(0xFFFFFF); bar.graphics.drawRect(0, 0, 244, 4); displayMenu.addChild(bar); bar.x = 3; bar.y = 22; barwidth = 244; barscale = int(barwidth/stageframerate); // displays Away logo displayPicto(); // Generate textfields // title titleField = new TextField(); titleField.defaultTextFormat = new TextFormat("Verdana", 10, 0xFFFFFF, true, null,null,null,null,"left"); titleField.text = "AWAY3D PROJECT"; titleField.selectable = false; titleField.height = 20; titleField.width = 140;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -