본문 바로가기

ALL

이벤트의 흐름 (Event Flow) 제어하기 이벤트는 캡쳐-타겟-버블의 흐름을 탄다고 이전 포스트 (2010/02/10 - [Flex/Event] - Flex 이벤트의 전파단계와 버블링 ) 에서 이야기 했었다. 이번에는 이전 포스트의 마지막에 예를 들었던 특정 Event Phase 에서만 이벤트를 받는 것과 이벤트의 흐름을 끊는 것에 대해서 알아보자. 언제나 그렇듯이 백문이 불여일견 이라고 동작하는걸 보는쪽이 이해가 확실히 빠르다. 캔버스 세개에 MouseEvent.CLICK 을 받을 수 있는 리스너가 붙어있고 이벤트가 들어오면 오른쪽 텍스트에어리어에 뿌려주도록 되어있다. useCapture All 체크 박스는 이전 예제와 동일하다. useCapture가 true 일때 이벤트가 이벤트가 어떻게 들어오는지 확인 하는 용도로 사용 하면 된다. redC.. 더보기
Flex 이벤트의 전파단계와 버블링 모든 이벤트는 type 과 target 속성을 가지고 있다. 이것은 어떤 이벤트가 발생했는지 어떤 객체가 이벤트를 발생시켰는지에 대한 정보이기 때문에 꼭 필요하다. EventDispatcher 가 이벤트를 Broadcase(전파) 하게 되면 Listener가 발생한 이벤트를 받게 된다. 이벤트는 두가지 형식으로 나눠진다.스테이지에 보이는 객체가 발생시키는 이벤트와 보이지 않는 객체가 발생시키는 이벤트이다. 스테이지에 보이는 객체가 발생시키는 이벤트는 이벤트 흐름(event flow)에 따라서 이동하게 된다. 여기서 나오는게 버블링이다. 보이지 않는 객체가 발생시키는 이벤트는 이벤트 흐름을 타지 않고 해당 객체에 직접 등록된 listener 에서만 캐치 할수 있다. Loader 같은 것이 이런 경우이다. .. 더보기
Flex와 BlazeDS, iBatis를 사용하기 위한 환경 설정하기 - 다운로드 BlazeDS는 adobe 에서 상용어플리케이션인 LCDS(LiveCycle Data Service)의 몇몇 기능을 제외하고 오픈소스로 풀어놓은 놈이다. 자바와 Flex 간의 소켓통신을 AMF 프로토콜을 이용해서 하게 되고 데이터를 받을때 RemoteClass를 세팅해서 별다른 변환 없이 자바쪽의 Bean을 Flex의 VO로 매핑 해주는등 일단 한번 맛을 들이고 나면.. json과 httpService의 조합은 더이상 처다보기도 싫을 정도로 편리하다. BlazeDS 첫번째 포스팅이니 사용할 수 있도록 다운받아서 설치 해보자 일단 환경은 톰켓 5.5 / jdk 1.5 이상 / 이클립스 가니메데 / Flex sdk 3.4 이상 / 플레시 플레이어 10 을 기준으로 한다. jdk는 1.5 이상에서만 Blaze.. 더보기
Flex Context Menu 에 원하는 메뉴 추가하기 Flex 에서 마우스 오른쪽 버튼을 누르면 나오는 컨텍스트 메뉴이다. 이놈은 플레시 플레이어가 기본으로 탑재 하고 있고 메뉴 자체를 삭제 할수가 없다. 따라서 플랙스에서 마우스 오른쪽 버튼을 눌렀을때 뭔가 행동을 해주고 싶다면 기본 컨텍스트 메뉴에 새로운 메뉴를 추가 해서 작업을 할수밖에 없는데 요걸 만들어 보도록 하자. 간단하기 때문에 한방에 소스 코드 가고 결과 화면 보고 중요한거만 설명하도록 한다. new ContextMenu() 로 새로운 메뉴를 생성하고 new ContextMenuItem('text Alert') 으로 메뉴에 들어갈 아이템을 만든다. 이후에 customItems 라는 배열 property에 만든 menuItem을 push 해주면 보이게 된다. this.container.conte.. 더보기
Flex Event 기본 설명 나는 디자이너 출신이기 때문에 프로그래밍에 대한 심오한 지식이 없다. 대학에서 윈도우 프로그래밍이나 자바, C 관련 언어에 대한 강의를 들었지만 디자인에 더 관심이 많았기 때문에 별로 주의깊에 듣지 않았었고... 그걸 지금 와서 엄청 후회하는 중이다. Flash2 때 처음 Flash를 접하게 되었고 3 버전부터 사용을 하다가.. 4,5 를 넘어오면서 actionscript가 timeline 보다 점점 벽으로 다가왔지만.. 그때까지도 할만 했다. 하지만 2.0이 나오면서 부터 기존에 onClick 형식으로 타임라인에 스크립트를 입력하던 방식에 한계가 오고 내입장에서는 듣도보도 못한 addEventListener 라는놈이 나오기 시작하면서.. "아.. 개발자의 영역으로 가버리는구나" 생각하고 디자인에만 매진.. 더보기
Flex 책 리뷰 및 추천 Q. 플렉스를 처음 배우려고 합니다. 책 추천좀.... 이런 질문이 커뮤니티들 마다 잊어먹을만 하면 한번씩 올라옵니다. 생각난김에 정리해봤습니다. 제가 봤던 책들만 정리 했습니다.. 더 많은 책들이 시중에 있겠지만.. 다들 비슷비슷하기 때문에.. 몇권 본 이후로는 안산거 같군요. 목록에 없는 책중에서 추천해주고 싶은 책 있으면 댓글 남겨주세요. 사서 보고 리뷰에 추가하도록 하겠습니다 원서는 제외 했구요 한글로 정식 출판된 책들로만 구성했습니다. 개인적인 견해 이므로 책 선택에 참고만 하세요. 예제로 배우는 Adobe 플렉스(개정판) 카테고리 컴퓨터/IT 지은이 옥상훈 (에이콘출판, 2008년) 상세보기 플렉스에 아주 처음 입문 하는 분들에게 추천하는 책입니다. 기초 구성요소들에 대한 설명이 잘 되있고.... 더보기
Flex, Flash 가비지 컬랙션 방법과 메모리 관리 이 글은 자꾸 까먹어서 정리겸 이해하고 있는 수준에 맞게 풀어서 쓴 글이다.. ------------------------- Flash나 Flex의 메모리는 개발자가 그냥 지울수가 없게 되어있다. 자바도 마찬가지고 VM기반의 언어에서는 메모리를 할당하고 해제 하는 과정이 시스템에서 알아서 하도록 되어있기 때문에.. 언제 메모리가 해제 되는지 개발자가 컨트롤 할수가 없다. 개발을 한 프로그램을 돌리기 시작했는데.. 메모리가 사용할수록 증가 한다면 그 프로그램은 결국에 가서는 시스템에 문제를 일으키고 종료될 것이다. 메모리 관리는 Garbage Collector (이하 GC) 라는 놈이 하게 되는데 말그대로 쓰레기를 수거하는 역할이다. 더이상 프로그램에서 사용하지 않는 객체들을 초기화하고 메모리를 시스템으로.. 더보기
플렉스 디버깅 <mx:TraceTarget /> 사용하기 플렉스는 쓸만한 수준의 디버깅툴을 제공한다. BreakPoint 를 사용해서도 작업을 할수 있고 Expression을 사용해서 특정 변수를 추적하는 것도 가능하다. 사용되는 함수를 전부 Step into 로 찾아들어갈 수도 있고 디버깅중에 BreakPoint를 추가할 수도 있다. 하지만 서버와 통신을 하는중에 발생하는 문제에 대해서는 정확하게 값이 넘어왔는데 플렉스쪽에서 처리를 잘못해서 데이터가 안나오는 것인지. 서버측의 문제인건지 명확하게 알기가 힘들다. 그래서 패킷을 감시하는 HttpWatch 라던지 서버쪽에 로그를 확인 한다던지 하게 되는데.. 플렉스 콘솔에서 바로 확인할수 있는 방법도 있다. 1. 이라고 어플리케이션 아래에 적어준다.. 2. 서버와 데이터통신을 시도한다.. 3. IDE 하단의 Vi.. 더보기
SharedObject 를 사용해서 로컬에 데이터 저장하기 SharedObject를 간단하게 이야기 하면 웹브라우저의 쿠키와 비슷하게 개발자가 원하는 데이터를 로컬에 저장하는 객체이다. 개별 유저에 커스터마이징된 화면이라던지, 이전에 방문했었는지의 여부 라던지.. 개발자가 필요에 의해서 데이터를 저장해야 하는 경우에 사용할 수 있다. 쿠키는 String 데이터만을 가지는데 반해 SharedObject 는 Array, Object 등 복합데이터를 저장할 수 있기 때문에 활용가능성이 무궁무진하다. (단 메서드는 저장할 수 없다 -ㅅ-) 기본 용량은 100K 이고 저장할 공간의 크기를 늘이거나 줄일 수 있다. 저장하는 데이터의 크기가 정해져 있다면 굳이 크게 할 필요는 없는거니 상황에 맞춰서 적용하면 되겠다. 100K를 넘는 용량을 지정하게 되면 사용자에게 저장하는 .. 더보기
FLEX RSL 사용해서 다이어트 하기 대부분의 RIA 사이트는 느리다. SWF 파일이 크고 왠지 플레시를 사용했으니 뭔가 가만히 있지 않고 움직여야 하지 않느냐 하는 요구 때문에 점점 파일은 커지고 로딩하는데 시간이 걸리게 된다. HTML과 달리 일단 로딩하면 페이지 이동이 없다는 것으로 클라이언트를 설득하면서 넘어가게 되는데 RSL을 사용해서 다이어트를 해보자 RSL은 Runtime Shared Library의 약자이다. 말그대로 미리 라이브러리를 로드하고 그것을 사용하는것이 아니고 Runtime에 공유 라이브러리를 사용하겠다는 것인데. 이게 처음에는 좀 뜻이 모호하다는 생각이 들었다. 단편적으로 이미지나 컴포넌트 같은것을 따로 빼내놓고 그것을 가져다가 사용한다는 것으로 알고 있었던 것이다. 하지만 RSL은 프레임웍도 런타임에 로드 할수 .. 더보기
페이지 정보 및 get 방식 파라미터 넘겨받기 - ExternalInterface 응용편 2 ExternalInterface 세번째 입니다. ExternalInterface가 뭔지 전혀 모르겠다 하시는 분은 2009/12/30 - [Flex/ExternalInterface] - ExternalInterface 기본기 이 포스트를 먼저 읽어 보고 오시면 됩니다. 자바스크립트에는 유용한 기능들이 많습니다. 가장 많이 사용하는 window 객체에는 브라우저의 정보 및 페이지 정보를 알아올수 있는 메서드들이 포함되어있는데 페이지 정보는 location에 들어있습니다. 그중 몇가지를 살펴보면 아래와 같습니다. window.location.href 주로 페이지 이동시에 많이 사용했던 속성인데 저 자체로는 현재 페이지의 정보를 가지고 있습니다. 아무사이트나 들어간 후에 주소창에 javascript:windo.. 더보기
윈도우 흔들기 Flex 버전 - ExternalInterFace 응용편 ExternalInterface가 뭐하는건지 잘 모르는 분은 2009/12/30 - [Flex/ExternalInterface] - ExternalInterface 기본기 이 글을 보고 오면 됩니다. ExternalInterface 가 자바스크립트의 함수를 실행시키기만 하는것이 아니고. 이전 글에 있듯이. Externalinterface.call("window.alert('아싸~')");처럼 자바스크립트 내장객체를 호출하거나 메서드를 실행하는것도 가능합니다. 이걸 이용해서 예전에 유행했던 윈도우 창 흔들기를 간단하게 구현해보도록 하겠습니다. 버튼을 클릭해보세요. 파일을 업로드 했습니다 ㅎㅎ 역시 아쉽게도 글쓰는 곳이 파일 업로드가 안되서 이 블로그를 흔드는것은 시범을 보여드릴수가 없고 어플리케이션 하나 .. 더보기
ExternalInterface 기본기 ExternalInterface는 swf 파일을 싸고 있는 컨테이너 html 의 자바스크립트와 통신하기 위한 인터페이스 입니다. ExternalInterface.call을 사용해서 html에 있는 자바스크립트 함수를 실행 시킬수 있고 ExternalInterface.callback을 사용해서 자바스크립트에서 SWF의 함수를 실행시킬수 있습니다. 이전 AS 2.0 에서는 fscommand()가 자바스크립트와의 통신에 사용되었는데 Player 9 버전 이후에는 Externalinterface를 사용하도록 권장하고 있습니다. html과 함께 사용되는 것이기 때문에 swf만 실행시키거나 stand alone player에서 실행시키면 디버그 창을 만날수있습니다. ExternalInterface가 중요한 이유가 .. 더보기
List 상하로 변경하기 2 - 스크롤포지션 세팅 Rinn`s Note - AS3 Dev : List 상하로 위치 변경하기 및 이벤트의 처리 by 퍼플린 | 2009/07/30 13:53 selectedIndex를 변경시켜주는 시점을 결정하기 위해서 list가 업데이트가 끝났다는 이벤트를 받아서 완료되면 인덱스를 수정해주는 것이다. 이처럼 Flex나 Flash는 몇몇 method를 제외하고는 비동기로 동작하기 때문에 데이터의 수정이나 삭제 입력시에 ... 위글에서 이어지는 포스트이니 이전글을 보고 오는것도 좋다. ------------------------------------------------------ 이전 글에서 리스트 내부의 아이템을 위로 옮기는 걸 했는데. 보면 알겠지만 뭔가 부족하다.. 리스트가 길어질경우 현제 옮기고 있는 아이템이 리스트.. 더보기
List 상하로 위치 변경하기 1 - 이벤트의 처리 리스트의 아이템을 선택해서 위치를 위로 올려주는 프로그램이다. private var arrData:Array; private var idx:int; private function init():void { arrData = []; arrData.push({label:"데이터1", data:"data1"}); arrData.push({label:"데이터2", data:"data2"}); arrData.push({label:"데이터3", data:"data3"}); list.dataProvider = arrData; } private function posUp():void { if(list.selectedItem && list.selectedIndex != 0) { idx= list.selectedIndex;.. 더보기
bitmapData getPixel 사용하기 package { import flash.display.Bitmap; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.net.URLRequest; [SWF(width="1000", height="1000", frameRate="24", backgroundColor="#FFFFFF")] public class bitmapDataHandle extends Sprite { private var container:Sprite; private var bitmap:Bitmap; private var loader:Loader; publ.. 더보기
플레시에서 개행문자의 처리 웹이나 디비에서 데이터를 가져온 텍스트의 경우 저장하는 방법에 따라서 개행이 /r/n 으로 넘어오는 경우가 있다. 이 경우 플레시는 한줄 개행이 아니고 두줄로 처리 해서 텍스트 필드의 라인간격이 두배로 나오는 경우가 생기게 되는데 이때는 넘어오는 텍스트에서 /r을 검색해서 삭제 해버리면 된다. 이럴때 사용하는 함수.. private function removeCarriageReturn(str:String):String { var myPattern:RegExp = /r/g; str = str.replace(myPattern,""); return str; } 함수이름이 내용보다 긴것 같지만 무슨 상관이랴~ /r 은 캐리지리턴이라부르고 입력커서를 라인의 맨 앞으로 보낸다 /n은 라인피드라고 해서 커서를 다음줄.. 더보기
MovieClip을 Bitmap 데이터로 저장하기 private function mcToBitmap(mc:MovieClip):Array { var bitmapData:BitmapData = new BitmapData(mc.width, mc.height,true); var bitmapArray:Array = []; var totalFrame:int = mc.scenes[0].numFrames; trace(totalFrame); for(var i:int=0; i 더보기
폰트 임베드시에 Unicode Range 설정하기 AS3 에서 폰트를 동적으로 embed 하기 위해서 폰트 SWF파일을 만들게 되는데 용량을 줄이기 위해서 필요한 설정이 unicodeRange이다. 숫자나 영문 한글 라틴 지원한다면 중국어 일어등 필요한 범위만을 embed하게 되므로 용량이 줄어들지만 범위 이외의 문자는 표시 되지 않기 때문에 그 범위를 벗어나는 텍스트는 절대 나오지 않는다 라는 확신이 있을때 지정해서 사용하는편이 좋다. 괜히 개발 해놨다가 글이 안올라가는거 같아요 이런 소리 듣고 나면 버그가 있는줄 알고 검내 찾다가.. 범위 이외라서 올라간 글이 단지 안보이는 것뿐이라는 것을 알고나면 허탈해질수도 있다. package { import flash.display.Sprite; public class Default extends Sprite.. 더보기
금연을 도와줄수 있는 동영상 Allen Carr's easy way to stop smoking 금연을 고민했더니 동생이 추천해준 영상 금연 생각이 있는분들은 한번씩 보는것도 좋을듯 싶다. 조용할때 집중해서 차분히 보라고 했다. 영어 압박이라 100% 이해는 힘들지만 대충 알아먹을수 있으면 그걸로 오케이 자막 버전도 있으면 좋을텐데 -ㅅ-;; 금연성공을 위해... 더보기
폰트 동적 추가 하기. 폰트 동적 추가하기 fontKR.swf 에 font Class가 들어있고 linkage 네임은 font_kr로 되어있다. package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.text.AntiAliasType; import flash.text.Font; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; public class FontLoadTest extends Sprite { private va.. 더보기