[AIR] 간단히 만들수 있는 Debuging Tool

2008. 11. 23. 23:01AIR

이걸 디버깅 툴이라고 해도 되나 ? .. 쭙 .. 음....
일단 그냥 간단한거니까 ;; ㅋㅋㅋ

이번에 하고 있는 프로젝트에 필요할것 같아서 주말에 짭짭히 시간을 내서 간단히 만들어 보았다
지금 하고 있는 프로젝트는 xml 를 통해서 text와 Sound 와 Image 를 몽땅 불러서 페이지에 보여주게 된다
그러나 이게 한두페이지가 아니니 천페이지가 넘어가는 분량이다 ..

xml 리소스 가공은 다른 사람 ( 무려 4 명이나 ~ 캬아 ~ ) 하고 있다 그러나 flash에서는 ioError 나 기본 기타 에러가 전혀 보이지 않는다 그러나 플래시에 대해 조금 아는 사람이라면 모를까 전혀 모르는 사람들이 작업을 하고있다
지금은 그냥 플래시 로만 보여지고 있다 ..  물론 따로 디버깅을 위한 TextField 나 TextArea 를 띄우면 좋다

그러나 업데이트도 문제가 된다 .. 지금 이 플젝은 단 한파일 가지고 1000페이지 가량을 관리 한다  그러기 때문에
파일 한개만 업데이트 하면 되지만 .. 업데이트 됐다고 메일 보내고 말하고 알려주고 확인하고 ~~
~ 어휴 그것도 시간이다 .. 그래서 그냥 좀 귀찮아도

"그냥 air 로 하자 ~"

에어에는 update 라는 잼있는 기능도 있고 기타 등등 잼있는게 많이 있거든요 ~ ㅋㅋㅋ

주말에 시간내서 후다닥 만들었다 ......

뭐든지 만든 시발점이 중요하다고 생각한다 ~

그리고 또 한가지 .. air의 매력을 제대로 남에게 보여주기 위해서는 제대로된 디자인으로 기본적으로
보여줘야한다고생각한다 .. 허름하게 옷입은 여자랑 이쁘게 옷입은 여자랑 차이가 있듯이 air라는 녀석도 옷을
이쁘게 입힐수록 멋지게 보여질것 이다 ..

일단 헛소리였다 ㅋㅋㅋ ( 지나 잘하지 .. 할것이다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ)

일단

실행하게 되면 이렇게 나온다 ~


뭐 크게 확대 해서 보면 아실꺼에요 ~ 왼족은 지금 만들고 있는 거고 오른쪽은 디버깅 창입니다

페이지가 넘어갈수록 페이지 정보 그리고 불러오고있는 xml 노드명 그리고 각종 기타 정보 등등 뭐 ..

이런 용도 입니다 ~

본 디자인 화면 기능 설명


대충 디자인은 이렇다 .. 이 디자인은 우리회사 디자인팀이 만든거 몰래 싹싹 고쳤다 ..
아 고쳤다고 전화해야하는데 -_-;;

기능은 별거 없어 기본 컴포넌트에 있는 TextArea를 사용하였다 ..

코드를 보자  정리 안했다 일단

NativeWindow 를 상속받은 DebugWindow.as 이다

package

{
     import flash.display.NativeWindowSystemChrome;
     import flash.display.Screen;
     import flash.display.Sprite;
     import flash.display.NativeWindow;
     import flash.display.NativeWindowType;
     import flash.events.NativeWindowBoundsEvent;
    
     import flash.text.TextFieldAutoSize;
     import flash.display.NativeWindowInitOptions;
     import flash.text.TextField;
     import fl.controls.TextArea;
     import flash.display.StageScaleMode;
     import flash.display.StageAlign;
     import flash.display.Shape;
     import flash.display.Bitmap;
     import flash.display.BitmapData;
     import flash.events.MouseEvent;
    
     /**
     * ...
     * #Creater Hazbola [ http://www.hazbola.com ]
     * #Update 08.11.23
     */
    
    
     public class DebugWindow extends NativeWindow
     {
          public function DebugWindow()
          {
               // NativeWindow를 투명으로 만들기 위한것 ~
               var options:NativeWindowInitOptions = new NativeWindowInitOptions ()
               options.systemChrome = NativeWindowSystemChrome.NONE;
               options.type = NativeWindowType.LIGHTWEIGHT;
               options.transparent = true;

               super ( options )
              
              
               // 바탕에 이미지 넣자 ~
               var back:Shape = new Shape();
               var bt:BitmapData = new bebugBackGround (0, 0);
              
               // 따로 이벤트가 없을경우 전 그냥 beginBitmapFill 로 Bitmap를 채워버립니다.
               back.graphics.beginBitmapFill ( bt ) ;
               back.graphics.drawRect ( 0,0,bt.width,bt.height );
               stage.addChild ( back );
              
               width = back.width;
               height = back.height;;
              
               stage.scaleMode = StageScaleMode.NO_SCALE;
               stage.align = StageAlign.TOP_LEFT;
              
               back.addEventListener( MouseEvent.MOUSE_DOWN, startMoveWindow );
              
          }
         
          private function startMoveWindow ( e:MouseEvent ) : void         
          {
               // 마우스 드랍시작하자 ~
               startMove();
          }
     }
}

그다음 화면에 보여줄 놈

package
{
     import flash.display.NativeWindowSystemChrome;
     import flash.display.Screen;
     import flash.display.Sprite;
     import flash.display.NativeWindow;
     import flash.display.NativeWindowType;
     import flash.events.NativeWindowBoundsEvent;
    
     import flash.text.TextFieldAutoSize;
     import flash.display.NativeWindowInitOptions;
     import flash.text.TextField;
     import fl.controls.TextArea;
     import flash.display.StageScaleMode;
     import flash.display.StageAlign;
     import flash.display.Shape;
     import flash.display.Bitmap;
     import flash.display.BitmapData;
     import flash.events.MouseEvent;
     import flash.desktop.NativeApplication;
     import flash.desktop.Updater;
    
     import flash.display.SimpleButton;

     /**
     * ...
     * #Creater Hazbola [ http://www.hazbola.com ]
     * #Update 08.11.23
     */
    
    
     public class DebugManager extends Sprite
     {
          // 싱글톤을 위한 인스턴트 선언
          static public var instance:DebugManager;
         
          // TextArea 선언
          private var debugArea:TextArea;         
         
          // NativeWindow
          private var debugWindow:DebugWindow;
         
          public function DebugManager()
          {
               instance = this;
              
               debugWindow = new DebugWindow();
               debugWindow.activate();
              
               // 모니터 해상도를 위한 Screen 선언
               var screen:Screen;
               var screenMember:Array = Screen.getScreensForRectangle( debugWindow.bounds );
               if ( screenMember.length == 1 )
               {
                    screen = screenMember[0];                   
               } else if ( screenMember.length == 2 )
               {
                    screen = screenMember[1];
               }              
              
               // 모니터 해상도 가장자리에 붙히기~
               debugWindow.x = screen.bounds.x+ screen.bounds.width - debugWindow.width;
               debugWindow.y = screen.bounds.y+ screen.bounds.height - debugWindow.height - 100;
              
              
               debugArea = new TextArea();
               debugArea.width = 618;
               debugArea.height = 345;
               debugArea.y = 75;
               debugArea.x = 7;
              
               // TextArea SetStyle 선언
               debugArea.setStyle( "upSkin", new Bitmap ( new DebugTextBackGround (0,0) ) );              
              
               debugWindow.stage.addChild ( debugArea );
              
               // 룰오버버튼을 위해 SimpleButton 으로 그냥 만들어버렸습니다 ~ ^_^
              
               var debugCloseBtn:SimpleButton = new DebugCloseBtn();
               debugWindow.stage.addChild ( debugCloseBtn )
               debugCloseBtn.x = 600;
               debugCloseBtn.y = 7;
              
              
               var debugInfoBtn:SimpleButton = new DebugInfoBtn();
               debugWindow.stage.addChild ( debugInfoBtn )
               debugInfoBtn.x = 580;
               debugInfoBtn.y = 7;

               var debugListClear:SimpleButton = new DebugListClear();
               debugWindow.stage.addChild ( debugListClear )
               debugListClear.x = 540;
               debugListClear.y = 417;
              
               debugListClear.addEventListener ( MouseEvent.CLICK, clearHD )
               debugCloseBtn.addEventListener ( MouseEvent.CLICK, closeHD )
              
          }
         
          private function closeHD ( e:MouseEvent ) : void         
          {
              
               // 닫기버튼을 클릭하면 NativeWindow 를 모조리 닫아버린다 ~
               var windowMember:Array = NativeApplication.nativeApplication.openedWindows;
               var n:uint = windowMember.length;
               while ( n-- )
               {
                    windowMember[n].close();
               }
          }
         
          private function clearHD ( e:MouseEvent ) : void         
          {
               debugArea.text = "";
          }
          public function debugText ( value:String): void
          {
               debugArea.text += value + "\n";
               setScroll();
          }
         
          public function setScroll():void
          {
               // TextArea 에 새로운 Text가 추가되면 자동으로 오른쪽 스크롤를 하단으로 내린다
               debugArea.verticalScrollPosition = debugArea.maxVerticalScrollPosition;
          }
     }
}

잉 별거 없는데 코드만 드럽게 기네 -_-;;

싱글톤으로 접근하면 언제 어디서든지 에러 를 debugText로 접근하면 된다

도움이 될련지 ;;;

* 여기서 선언한 싱글톤 비스무리한  인스턴스는 간단하기때문에 사용한것입니다 절대 이런 방식으로 코딩하시면
안되효~ ~ ^_^