<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7392872561481346708</id><updated>2012-02-16T20:03:30.982+09:00</updated><category term='NetStream'/><category term='액션스크립트 3.0'/><category term='스펙트럼'/><category term='scrollbar'/><category term='tomcat6.0'/><category term='MP3플레이어'/><category term='MotionTween'/><category term='duplicateMovieClip'/><category term='톰캣설치'/><category term='parent'/><category term='ColorTransform클래스'/><category term='point.polar'/><category term='서버다운'/><category term='NetSteam 클래스'/><category term='array'/><category term='충돌감지'/><category term='Drag'/><category term='SoundChannel'/><category term='NaverOpenAPI'/><category term='Point 클래스 속성'/><category term='사운드'/><category term='display.Sprite'/><category term='ColorTransform'/><category term='APMSETUP'/><category term='영역 대 영역 감지'/><category term='eclipse'/><category term='Events'/><category term='hitTestObject()'/><category term='Video'/><category term='Vector 벡터'/><category term='FLV'/><category term='Duplicate'/><category term='rgb값'/><category term='symbol Linkage'/><category term='java'/><category term='play()'/><category term='FileReference'/><category term='spectrum'/><category term='graphics'/><category term='서버연동'/><category term='volume'/><category term='오버라이딩'/><category term='NetConnention'/><category term='hitTest'/><category term='비트맵Bitmap'/><category term='드롭'/><category term='oracle'/><category term='Point'/><category term='NetConnection'/><category term='RGB'/><category term='Symbol'/><category term='protected'/><category term='메서드 재정의'/><category term='taod for oracle'/><category term='클래스'/><category term='접근제어자'/><category term='FileUpload'/><category term='SoundTransform'/><category term='Actionscript'/><category term='GlowFilter()'/><category term='sound play'/><category term='motion'/><category term='ActionSript3.0 충돌감지'/><category term='Video media'/><category term='removeChildAt()'/><category term='코드 템플릿'/><category term='Sprite'/><category term='javascript'/><category term='public'/><category term='panning'/><category term='마우스드래그'/><category term='ActionScript 3.0 API'/><category term='code templete'/><category term='64bit'/><category term='addEventListener()'/><category term='ByteArray'/><category term='Bitmap'/><category term='polar'/><category term='FLV Player'/><category term='tomcat'/><category term='Stage'/><category term='MovieClip'/><category term='sound stop'/><category term='symbol properies'/><category term='빛의 삼원색'/><category term='인터페이스'/><category term='drop'/><category term='IBitmaDrawable'/><category term='drag&amp;amp;drop'/><category term='sound'/><category term='ActionScript3.0'/><category term='Point 클래스 정의'/><category term='draw'/><category term='톰캣 실행 에러'/><category term='stop()'/><category term='Rectangle'/><category term='BitmapData'/><category term='hitTestPoint()'/><category term='sprite클래스'/><category term='Point_length'/><category term='interpolate'/><category term='Point.distance'/><category term='이클립스톰캣연동'/><category term='addChildAt()'/><category term='springframework'/><category term='Point 클래스 메서드'/><category term='flash Linkage'/><category term='knowledge'/><category term='사운드 패닝'/><category term='단위시간'/><category term='동영상'/><category term='php서버'/><category term='API'/><category term='인터페이스 클래스'/><category term='스크롤바'/><category term='drawRect'/><category term='private'/><category term='APM_setup'/><category term='Callback'/><category term='Linkage 설정'/><category term='사운드 볼륨'/><category term='동영상 플레이어'/><category term='APM 설치'/><category term='ActionSript3.0'/><category term='정보클래스'/><category term='드래그'/><category term='Array 배열'/><category term='사운드채널'/><category term='URLRequest'/><category term='비트맵'/><category term='환경변수'/><category term='사운드 편집'/><category term='point 클래스'/><category term='numChildren'/><category term='드래그 앤 드롭'/><category term='point.interpolate'/><category term='이클립스'/><category term='OpenAPI'/><category term='Sound 클래스'/><title type='text'>애플민트의 액션스크립트</title><subtitle type='html'>안녕?</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-2772708934829634622</id><published>2011-08-10T09:16:00.006+09:00</published><updated>2011-08-10T10:22:16.308+09:00</updated><title type='text'>SSO(Single Sign On) : 통합 인증 로그인, 단일 사용 승인</title><content type='html'>&lt;div&gt;# JOSS (Java Open Single Sign-On)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;SSO란 Single Sign On 의 약자로 여러개의 사이트에서 한번의 로그인으로 여러가지 다른 사이트들을 자동적으로 접속, 사용하는 방법을 말한다.&lt;div&gt;&lt;br /&gt;&lt;div&gt;일반적으로 서로 다른 시스템, 서로 다른 사이트에서는 각각의 사용자 정보를 관리하게 된다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;하지만 필요에 의해서 각각의 사용자 정보를 연동하여 사용해야 할 경우가 생긴다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이때 하나의 사용자 정보를 기반으로 여러 시스템을 하나로 개발하기에는 많은 어려움이 따른다. 따라서 각각의 정보를 그대로 두고 통합인증을 사용하게 된다. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이때 각각의 시스템에 로그인할 때 통합 인증 정보가 있는지 확인하고 통합인증정보가 있을경우 타 시스템에서 자동으로 로그인 가능하도록 처리하고, 없을 때는 로그인하면서 통합인증정보를 생성하여 다른 시스템에서 참조 가능하도록 하는 것이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: 굴림, Gulim, dotum, 돋움, sans-serif; font-size: 12px; line-height: 18px; background-color: rgb(255, 255, 255); "&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;** SSO와 세션 클러스터링 의미비교&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;Single Sign On(통합인증)을 "하나의 아이디/패스워드로 여러 어플리케이션에 접근할 수 있도록 관리하는&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;통합시스템"을 의미하는 개념적인 층위의 용어라고 할 때, 자바에서의 세션 클러스터링은 이를 구체화한 실제&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;방법론중의 하나, 즉 SSO의 하위개념으로 해석할 수 있을 듯 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;또한, 자바 세션 클러스터링은 일반적 SSO의 기능인 사용자의 로그인 여부 판별과 고유 아이디 인증을 넘어서,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;단일 어플리케이션 상황에서와 마찬가지의 세션 스코프 유지를, 별개의 어플리케이션 또은 물리서버 사이에서도&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;가능하도록 하는 데에 초점이 맞춰져 있는 논제같습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;즉, 다수의 어플리케이션간에 세션 스코프를 연결하고, 스코프에 저장되는 자바 오브젝트들의 상태를 유지할&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;수 있도록 보장하는 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; "&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;** A,B,C,D 서버가 있다고 할 때의 일반적인 SSO 구현방식&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;** 1.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;사용자가 로그인을 성공할 경우 로그인 처리 페이지가 A,B,C,D 서버에 있는 각각의 loginok.jsp 페이지를&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;IFRAME을 통해 동시에 호출합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;이때, A,B,C,D 서버의 loginok.jsp 페이지는 해당 브라우저 사용자에 대해 로그인 처리를 하고,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;Requset에 담겨온 loginid를 이용해서 세션에 사용자정보를 담습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;로그아웃도 마찬가지로 처리합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;4개의 세션이 별개로 생기는 셈이지만, 이는 모두 공통된 하나의 브라우저에 대응하므로, 브라우저가&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;종료되면 동시에 소멸됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;세션간의 연동(객체 전달같은)은 불가능하지만, 하나의 브라우저에 대해서 각각의 어플리케이션이&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;동일한 인증상태를 유지하고 있고, 각각의 세션에 저장된 사용자 정보가 동일한 것이라는 무결성을&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;획득할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;** 2.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;쿠키를 이용하는 방법 (가장 대중적, 메인 도메인이 같을 때)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;로그인하면, 고유의 키를 만들어 쿠키에 저장합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;각각의 사이트에서는 쿠키에 담긴 이 키값의 여부로, 로그인 여부를 판단하고 세션을 생성하며&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;키값에 따른 고유한 사용자 정보를 뽑아와 세션에 저장합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;로그아웃시에는 쿠키를 지워줍니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;** 3.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;하나의 서버에서 인증처리를 전담하는 방법&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;로그인과 세션을 관리하는 A서버의 a페이지를, 통합인증이 필요한 모든 페이지에서 프레임으로 포함하고,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;처리에 필요한 사용자정보를 여기에 요청, 응답받습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;a페이지는 XMLHttpRequest를 이용 페이지 갱신없이 A서버의 다른 프로그램을 호출하고 응답을 얻어옵니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;- 시나리오&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;1. 메인프레임에서 로그인프레임에 로그인여부 질의 top.loginFrame.getIsLogin();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;2. 로그인 프레임의 a페이지는 응답받을 메인프레임의 함수를 이벤트로 등록후 서버측에 요청을 보냅니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;   sendRequest("./isLogin.jsp","data","top.mainFrame.isLogin");&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;3. 요청받은 서버는 세션을 참조하여 로그인 여부 판단, XMLHttpRequest에 응답합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;4. 서버에서의 응답값을 매개변수로 top.mainFrame.isLogin(isLogin); 이 실행됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;일반적인 방법은 아닙니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;** 4.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;세션 클러스터링을 이용한 방법&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;고유한 키값을 쿠키나 기타 장소에 보관하고, 별개의 서버 프로그램과 소켓으로 통신하여 키값에 대해 배당된&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;컬렉션에서, 직렬화된 자바객체를 꺼내오거나 혹은 저장하며 그 상태를 유지시키는 방법입니다. 키값(연결)이&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;유지되는 한, 저장소내의 동일한 객체에 접근할 수 있다는 보장을 만들어줍니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;즉, 통합 인증보다는, 인증 후의 데이터 공유에 촛점이 맞춰져 있는 것 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 2em; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;** 5.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-family: Verdana; "&gt;&lt;span style="line-height: 2em; font-size: 10pt; "&gt;통합인증 솔루션 사용 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-2772708934829634622?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/2772708934829634622/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2011/08/ssosingle-sign-on.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2772708934829634622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2772708934829634622'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2011/08/ssosingle-sign-on.html' title='SSO(Single Sign On) : 통합 인증 로그인, 단일 사용 승인'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-8633412307362947646</id><published>2011-01-10T17:41:00.000+09:00</published><updated>2011-01-29T19:56:42.847+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>jQuery : 자동 Tab 이동</title><content type='html'>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;/P&gt;&lt;P&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; * function :&amp;nbsp; Move Tab &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 카테고리 Tab 이동&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; * param &amp;nbsp; :&amp;nbsp; move_url &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이동할 url 명(input 의 id, name 명) &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; * &amp;nbsp; &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; function moveTab(move_url){&lt;br /&gt;&amp;nbsp; &amp;nbsp;alert(move_url);&lt;br /&gt;&amp;nbsp; &amp;nbsp;eval('$("#form 이름").attr("action",&amp;nbsp; "/이동할 path/' + move_url + '.do").submit();');&lt;br /&gt;&amp;nbsp;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face=Verdana&gt;[/code]&lt;/FONT&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-8633412307362947646?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/8633412307362947646/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2011/01/jquery-%EC%9E%90%EB%8F%99-tab-%EC%9D%B4%EB%8F%99.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8633412307362947646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8633412307362947646'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2011/01/jquery-%EC%9E%90%EB%8F%99-tab-%EC%9D%B4%EB%8F%99.html' title='jQuery : 자동 Tab 이동'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-5486842819933002639</id><published>2011-01-10T17:37:00.000+09:00</published><updated>2011-01-29T19:56:42.743+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>jQuery : 날짜 new Date()</title><content type='html'>&lt;P&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;var date = new Date();&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;var Today = new Array();&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;Today['Year'] = date.getFullYear();&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;Today['Month'] = date.getMonth();&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;Today['Day'] = date.getDate();&lt;/FONT&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-5486842819933002639?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/5486842819933002639/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2011/01/jquery-%EB%82%A0%EC%A7%9C-new-date.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5486842819933002639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5486842819933002639'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2011/01/jquery-%EB%82%A0%EC%A7%9C-new-date.html' title='jQuery : 날짜 new Date()'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-1811558369315584191</id><published>2010-12-20T15:27:00.000+09:00</published><updated>2011-01-29T19:56:42.509+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>jQuery : each() break / continue</title><content type='html'>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;for 문과 같은 기능 each()&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;$("#아이디명").each(function(i, obj){&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return false // break&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return true // continue&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;});&lt;/FONT&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-1811558369315584191?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/1811558369315584191/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/12/jquery-each-break-continue.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/1811558369315584191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/1811558369315584191'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/12/jquery-each-break-continue.html' title='jQuery : each() break / continue'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-4910319217002932590</id><published>2010-11-24T00:32:00.000+09:00</published><updated>2011-01-29T19:56:42.079+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>javascript getElementBy-----() 함수 : IE(InternetExplorer)와 FF(FireFox) 차이</title><content type='html'>&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;1. getElementById() - document.getElementByid("값")&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- id를 이용해서 특정 태그 객체를 찾음.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- &lt;STRONG&gt;id&lt;/STRONG&gt;는 원래 html 문서내에서 &lt;STRONG&gt;유일&lt;/STRONG&gt;해야 하므로 지정된 id를 가진 태그가 없거나,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;STRONG&gt;두개 이상이면&lt;/STRONG&gt; getElementByid 메서드는&amp;nbsp; &lt;STRONG&gt;null&lt;/STRONG&gt;로 리턴.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ex)&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; var a = document.getElementByid("test");&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; alert(a.value);&lt;/P&gt;&lt;P&gt;&amp;lt;/script&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;lt;input id="test" value="one"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;# IE : ID와 Name 둘다 찾아 먼저 나온 것 하나를 return.&lt;/P&gt;&lt;P&gt;&amp;nbsp; ( IE8부터 FF와 동일하게 ID만 찾음 )&lt;/P&gt;&lt;P&gt;# FF : ID만 찾아 먼저 나온 것 하나를 return.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;2. getElementsByName() - document.getElementsByName("값")&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- name 이 같은 객체를 배열로 가져오는 매소드.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 지정된 이름이나 태그이름을 가진 태그 객체의 배열을 리턴하며,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 객체를 찾지 못하면 길이가 0인 배열을 리턴함.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 중복되지 않게 이름을 고유하게 줬더라고 배열로 들어와서 0번을 차지함.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;# getElementByName 이란 method는 존재하지 않음.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ex)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; var a = document.getElementsByName("test");&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; document.write("배열 값 출력 : ");&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; for(var i=0; i&amp;lt;a.length; i++){&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; document.write(a.value[i] + " ");&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;lt;/script&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;lt;input type="text" name="NAME" /&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;input type="hidden" name="test" value="one" /&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;input type="hidden" name="test" value="two" /&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;input type="hidden" name="test" value="three" /&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;3. getElementByTagName() - document.getElementsByTagName("태그명")&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 요소노드의 태그명을 가지고 접근하는 메소드.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ex)&lt;/P&gt;&lt;P&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; function fun(){&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var items = document.getElementsByTagName("");&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; alert(items.length);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; window.onload = func;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;lt;/script&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 문서내의 태그명들을 모두 불러와 items 이라는 변수에 저장하게 된다. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- items 라는 변수는 물론 객체변수이고, 만약에 문서내 태그명들이 여러개라면 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; items라는 변수는 1차원 배열이 된다. (items[0], items[1], items[2] ... )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- items.length : 문서내에 존재하는 태그의 갯수이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-4910319217002932590?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/4910319217002932590/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/javascript-getelementby-%ED%95%A8%EC%88%98.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4910319217002932590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4910319217002932590'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/javascript-getelementby-%ED%95%A8%EC%88%98.html' title='javascript getElementBy-----() 함수 : IE(InternetExplorer)와 FF(FireFox) 차이'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-8393889233702255529</id><published>2010-11-15T14:19:00.000+09:00</published><updated>2011-01-29T19:56:41.896+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><title type='text'>@RequestParam</title><content type='html'>&lt;P&gt;&lt;SPAN class=mw-headline&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000 size=3&gt;@RequestParam&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=mw-headline&gt;- RequestParam annotation은 key=value 형태로 화면에서 넘어오는 파라미터를 맵핑된 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=mw-headline&gt;&amp;nbsp; 메소드의 파라미터로 지정해준다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=mw-headline&gt;- 주로 get 방식으로 들어오는 request에서 사용한다. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 필수 요건이 아닐 경우, @RequestParam(value="id", required="false")와 같이 옵션을 주고 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 사용할 수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;----------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A&gt;&lt;SPAN class=mw-headline&gt;@Controller&lt;/A&gt;&lt;br /&gt;public class LoginController {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=mw-headline&gt;&amp;nbsp; &amp;nbsp; @Autowired&lt;br /&gt;&amp;nbsp; &amp;nbsp; private LoginService loginService;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=mw-headline&gt;&amp;nbsp; &amp;nbsp; @Autowired&lt;br /&gt;&amp;nbsp; &amp;nbsp; private SampleService sampleService;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN class=mw-headline&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; /**&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * 사용자로 부터 아이디, 패스워드를 입력받아 인증 성공이면 세션 객체에 계정정보를 담고 사원정보리스트 페이지로 포워딩한다. 인증에&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * 실패하면 로그인 페이지로 다시 리턴한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &amp;nbsp; @RequestMapping("/loginProcess.do")&lt;br /&gt;&amp;nbsp; &amp;nbsp; public String login(HttpServletRequest request, &lt;STRONG&gt;@RequestParam&lt;/STRONG&gt;("id") String id,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;STRONG&gt;@RequestParam&lt;/STRONG&gt;("password") String password) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // TODO [Step 4-1-01]&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // LoginService의 authenticate메소드를 이용하여 로긴여부 체크 Account 객체를 리턴 받는다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Account account = (Account) loginService.authenticate(id, password);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /*&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * TODO [Step 4-1-03] &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * 가져온 account 객체가 null 아닌 경우&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * request.getSession() 메소드를 통해 Session을 구해 UserAccount 이름으로 Session 에&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * Attribute로 저장한다. 그리고 "redirect:/loginSuccess.do" 값을 반환한다. null 인경우&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * "login" 반환한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (account != null) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; request.getSession().setAttribute("UserAccount", account);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return "redirect:/loginSuccess.do";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return "login";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; // TODO [Step 4-1-04]&lt;br /&gt;&amp;nbsp; &amp;nbsp; // loginSuccess.do 로 호출된 처리(@RequestMapping(value="/loginSuccess.do", method=RequestMethod.GET) 를 위한&lt;br /&gt;&amp;nbsp; &amp;nbsp; // 메소드(loginSuccess) 를 void 타입의 public 메소드를 만들어라.&lt;br /&gt;&amp;nbsp; &amp;nbsp; @RequestMapping(value = "/loginSuccess.do", method = RequestMethod.GET)&lt;br /&gt;&amp;nbsp; &amp;nbsp; public void loginSuccess() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; @RequestMapping("/exception.do")&lt;br /&gt;&amp;nbsp; &amp;nbsp; public String invokeException(@RequestParam("id") String id ) throws Exception {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sampleService.invokeMethodAException();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-8393889233702255529?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/8393889233702255529/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/requestparam.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8393889233702255529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8393889233702255529'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/requestparam.html' title='@RequestParam'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-8159648035576029054</id><published>2010-11-15T14:11:00.000+09:00</published><updated>2011-01-29T19:56:41.843+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><title type='text'>@Controller</title><content type='html'>&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600 size=3&gt;@Controller&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Controller annotation으로 Controller interface 및 class의 기능을 간단하게 사용할 수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Annotation을 사용하지 않고, Controller를 직접 상속받아 쓰는 경우 필요한 xml 설정을 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 생략할 수 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- SimpleFormController, MultiActionController 등 Controller의 종류를 명시하지 않고 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; @Controller 설정만으로 사용할 수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- xxx-servlet.xml 파일에서 component-scan 으로 web controller가 있는 패키지를 명시해 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 줌으로써, 별도의 bean 설정을 하지 않아도 @Controller로 등록된 클래스 파일에 대한 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bean을 자동으로 생성해준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Controller로 사용하고자 하는 클래스에 @Controller 지정해주면 component-scan으로 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 자동 등록된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;----------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;@Controller&lt;br /&gt;&lt;/STRONG&gt;public class LoginController {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; @Autowired&lt;br /&gt;&amp;nbsp; &amp;nbsp; private LoginService loginService;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; @Autowired&lt;br /&gt;&amp;nbsp; &amp;nbsp; private SampleService sampleService;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; /**&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * 사용자로 부터 아이디, 패스워드를 입력받아 인증 성공이면 세션 객체에 계정정보를 담고 사원정보리스트 페이지로 포워딩한다. 인증에&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * 실패하면 로그인 페이지로 다시 리턴한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &amp;nbsp; @RequestMapping("/loginProcess.do")&lt;br /&gt;&amp;nbsp; &amp;nbsp; public String login(HttpServletRequest request, @RequestParam("id") String id,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestParam("password") String password) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // TODO [Step 4-1-01]&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // LoginService의 authenticate메소드를 이용하여 로긴여부 체크 Account 객체를 리턴 받는다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Account account = (Account) loginService.authenticate(id, password);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /*&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * TODO [Step 4-1-03] &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * 가져온 account 객체가 null 아닌 경우&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * request.getSession() 메소드를 통해 Session을 구해 UserAccount 이름으로 Session 에&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * Attribute로 저장한다. 그리고 "redirect:/loginSuccess.do" 값을 반환한다. null 인경우&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * "login" 반환한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (account != null) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; request.getSession().setAttribute("UserAccount", account);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return "redirect:/loginSuccess.do";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return "login";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; // TODO [Step 4-1-04]&lt;br /&gt;&amp;nbsp; &amp;nbsp; // loginSuccess.do 로 호출된 처리(@RequestMapping(value="/loginSuccess.do", method=RequestMethod.GET) 를 위한&lt;br /&gt;&amp;nbsp; &amp;nbsp; // 메소드(loginSuccess) 를 void 타입의 public 메소드를 만들어라.&lt;br /&gt;&amp;nbsp; &amp;nbsp; @RequestMapping(value = "/loginSuccess.do", method = RequestMethod.GET)&lt;br /&gt;&amp;nbsp; &amp;nbsp; public void loginSuccess() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; @RequestMapping("/exception.do")&lt;br /&gt;&amp;nbsp; &amp;nbsp; public String invokeException(@RequestParam("id") String id ) throws Exception {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sampleService.invokeMethodAException();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-8159648035576029054?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/8159648035576029054/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/controller.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8159648035576029054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8159648035576029054'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/controller.html' title='@Controller'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-8332724416340328727</id><published>2010-11-15T14:00:00.000+09:00</published><updated>2011-01-29T19:56:41.785+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springframework'/><title type='text'>@RequestMapping</title><content type='html'>&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600 size=3&gt;@RequestMapping&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- url을 클래스 또는 메소드와 맵핑시켜주는 역할을 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Annotation을 쓰지 않을때 지정했던 Controller 등록을 위한 url bean 설정을 생략할 수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- class에 하나의 url 맵핑을 할 경우, 클래스 위에 @RequestMapping("/url")을 지정하며, &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; GET 또는 POST 방식 등의 옵션을 줄 수 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 해당되는 메소드가 실행된 후, return 페이지가 따로 정의되어 있지 않으면 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; @RequestMapping("/url")에서 설정된 url로 다시 돌아간다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 메소드별로 url 맵핑을 할 경우는 메소드 위에 @RequestMapping("/url")로 지정한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- return 페이지가 지정되지 않은 경우 원래의 맵핑되었던 url로 돌아간다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- return type을 String으로 하여 redirect:url또는 forward:url을 사용하여 다른 페이지로 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 넘길 수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;--------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;@Controller&lt;br /&gt;public class LoginController {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; @Autowired&lt;br /&gt;&amp;nbsp; &amp;nbsp; private LoginService loginService;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; @Autowired&lt;br /&gt;&amp;nbsp; &amp;nbsp; private SampleService sampleService;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; /**&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * 사용자로 부터 아이디, 패스워드를 입력받아 인증 성공이면 세션 객체에 계정정보를 담고 사원정보리스트 페이지로 포워딩한다. 인증에&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * 실패하면 로그인 페이지로 다시 리턴한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;STRONG&gt; @RequestMapping&lt;/STRONG&gt;("/loginProcess.do")&lt;br /&gt;&amp;nbsp; &amp;nbsp; public String login(HttpServletRequest request, @RequestParam("id") String id,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @RequestParam("password") String password) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // TODO [Step 4-1-01]&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // LoginService의 authenticate메소드를 이용하여 로긴여부 체크 Account 객체를 리턴 받는다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Account account = (Account) loginService.authenticate(id, password);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /*&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * TODO [Step 4-1-03] &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * 가져온 account 객체가 null 아닌 경우&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * request.getSession() 메소드를 통해 Session을 구해 UserAccount 이름으로 Session 에&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * Attribute로 저장한다. 그리고 "redirect:/loginSuccess.do" 값을 반환한다. null 인경우&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; * "login" 반환한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (account != null) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; request.getSession().setAttribute("UserAccount", account);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return "redirect:/loginSuccess.do";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return "login";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; // TODO [Step 4-1-04]&lt;br /&gt;&amp;nbsp; &amp;nbsp; // loginSuccess.do 로 호출된 처리(@RequestMapping(value="/loginSuccess.do", method=RequestMethod.GET) 를 위한&lt;br /&gt;&amp;nbsp; &amp;nbsp; // 메소드(loginSuccess) 를 void 타입의 public 메소드를 만들어라.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;STRONG&gt; @RequestMapping&lt;/STRONG&gt;(value = "/loginSuccess.do", method = RequestMethod.GET)&lt;br /&gt;&amp;nbsp; &amp;nbsp; public void loginSuccess() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; @RequestMapping("/exception.do")&lt;br /&gt;&amp;nbsp; &amp;nbsp; public String invokeException(@RequestParam("id") String id ) throws Exception {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sampleService.invokeMethodAException();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-8332724416340328727?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/8332724416340328727/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/requestmapping.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8332724416340328727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8332724416340328727'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/requestmapping.html' title='@RequestMapping'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-2966065913068109964</id><published>2010-11-12T17:25:00.000+09:00</published><updated>2011-01-29T19:56:41.733+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>eclipse.ini 파일 설정</title><content type='html'>-showsplash&lt;br /&gt;org.eclipse.platform&lt;br /&gt;--launcher.XXMaxPermSize&lt;br /&gt;128M&lt;br /&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;-vm&lt;br /&gt;C:\egovCohort_proj\bin\jdk1.5.0\bin\javaw.exe&lt;br /&gt;&lt;/FONT&gt;&lt;/STRONG&gt;-framework&lt;br /&gt;plugins\org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar&lt;br /&gt;-vmargs&lt;br /&gt;-Dosgi.requiredJavaVersion=1.5&lt;br /&gt;-Xms40m&lt;br /&gt;-Xmx512m&lt;br /&gt;-Dfile.encoding=UTF-8&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-2966065913068109964?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/2966065913068109964/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/eclipseini-%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%A0%95.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2966065913068109964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2966065913068109964'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/eclipseini-%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%A0%95.html' title='eclipse.ini 파일 설정'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-4462759481707029964</id><published>2010-11-12T14:35:00.000+09:00</published><updated>2011-01-29T19:56:41.663+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>jdk 1.6 -&gt; jdk 1.5 버전 변경 에러</title><content type='html'>&lt;P&gt;&lt;STRONG&gt;C:\Users\kimjinmi&amp;gt;java -version&lt;br /&gt;Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'&lt;br /&gt;has value '1.5', but '1.6' is required.&lt;br /&gt;Error: could not find java.dll&lt;br /&gt;Error: could not find Java SE Runtime Environment.&lt;br /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 환경변수에서 path의 JAVA_HOME 설정 내용을 맨 앞으로 옮긴다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- oracle과 java의 경로 설정에 문제가 생겨 이런 에러를 발생시킬 수 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;%JAVA_HOME%\bin;&lt;/STRONG&gt;&lt;/FONT&gt;C:\TmaxSoft\JEUS5.0\bin;C:\TmaxSoft\JEUS5.0\lib\system;C:\app\kimjinmi\product\11.2.0\dbhome_1\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Dell\Dell Wireless WLAN Card;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files (x86)\Subversion\bin;C:\Program Files\TortoiseSVN\bin;%CATALINA_HOME%\bin;%CATALINA_HOME%\conf\web.xml;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-4462759481707029964?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/4462759481707029964/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/jdk-16-jdk-15-%EB%B2%84%EC%A0%84-%EB%B3%80%EA%B2%BD-%EC%97%90%EB%9F%AC.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4462759481707029964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4462759481707029964'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/jdk-16-jdk-15-%EB%B2%84%EC%A0%84-%EB%B3%80%EA%B2%BD-%EC%97%90%EB%9F%AC.html' title='jdk 1.6 -&amp;gt; jdk 1.5 버전 변경 에러'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-2091097399010069816</id><published>2010-11-01T20:10:00.000+09:00</published><updated>2011-01-29T19:56:41.602+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>jstl  설명 및 세팅</title><content type='html'>&lt;P&gt;&lt;FONT color=#e53693 size=3&gt;&lt;STRONG&gt;# 01&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;JSTL ( JSP Standart Tag Library )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;JSP 에서 자바의 각종 기능을 태그형태로 사용할 수 있도록 정의해서 사용할 수 있는 것을 말합니다. 쉽게 말해서 굳이 자바나 JSP 언어를 쓰지 않고 태그형태로 HTML 상에서 불러다 쓸 수 있다는 말이죠. JSTL 은 커스텀태그의 일종입니다. 그렇다면 또 커스텀 태그가 무슨 뜻일까요?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;커스텀 태그&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;자신이 직접 정의할 수 있는 태그를 말합니다. 평소에 쓰던 태그는 각각 기능이 있지만 그 기능은 한정되어 있고 원하는 기능이 있지만 일반적인 태그의 기능이 한정되었음을 느끼실 때가 많으셨을 겁니다. 그것을 대비하여 자신이 새로운 태그를 만들어 자신만의 태그를 만들 수 잇다는 거죠.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;커스텀 태그의 장점&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 라이브러리 형태로 만들어서 필요할 때마다 쓰기 때문에 개발속도의 향상 업&lt;/P&gt;&lt;P&gt;- 일반 태그의 한게점 극복&lt;/P&gt;&lt;P&gt;- 자기가 직접 작성한 태그이기 때문에 유지보수 및 가독성 업&lt;/P&gt;&lt;P&gt;- 반복적 기능을 쉽게 구현이 가능하기 때문에 효율적&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;최대한 자바코드를 줄이기 위해 거의 모든 자바 코드를 커스텀 태그로 바꾸어 놓은 것을&amp;nbsp; : JSTL&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;EL ( Expression Language )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;표현언어를 의미함. 자바코드를 대신하여 다른 표현식을 사용함.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;lt;%=age%&amp;gt; -&amp;gt; ${age}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위와 같은 형태로 바꾸어 쓸 수 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;EL 을 쓸때는 ${변수명} 형태로 구성&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#e53693 size=3&gt;&lt;STRONG&gt;# 02&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;다운로드 및 세팅&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi"&gt;http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 주소에서 zip 파일을 다운받는다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;압축을 풀고 lib 폴더에 들어 있는 jstl.jar 파일과 standard.jar 파일을 복사해서 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;tomcat의&amp;nbsp; lib 폴더 안에, 또는 생성한 프로젝트의 lib 폴더 안에 넣어두면 세팅 완료.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#e53693 size=3&gt;# 03&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;예제&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;lt;&lt;A href="mailto:%@page"&gt;%@page&lt;/A&gt; contentType="text/html"%&amp;gt;&lt;br /&gt;&amp;lt;&lt;A href="mailto:%@page"&gt;%@page&lt;/A&gt; pageEncoding="UTF-8"%&amp;gt;&lt;br /&gt;&amp;lt;&lt;A href="mailto:%@taglib"&gt;%@taglib&lt;/A&gt; uri="&lt;A href="http://java.sun.com/jsp/jstl/core"&gt;http://java.sun.com/jsp/jstl/core&lt;/A&gt;" prefix="c"%&amp;gt;&lt;br /&gt;&amp;lt;&lt;A href="mailto:%@taglib"&gt;%@taglib&lt;/A&gt; prefix="fn" uri="&lt;A href='http://java.sun.com/jsp/jstl/functions"%'&gt;http://java.sun.com/jsp/jstl/functions"%&lt;/A&gt;&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "&lt;A href="http://www.w3.org/TR/html4/loose.dtd"&gt;http://www.w3.org/TR/html4/loose.dtd&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;title&amp;gt;JSP Page&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;h1&amp;gt;EL Function(JSTL 1.1)&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;c:set var="name" value="Oracle dbms 오라클 클럽" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;c:set var="name" value="${fn:trim(name)}" /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-2091097399010069816?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/2091097399010069816/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/jstl-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EC%84%B8%ED%8C%85.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2091097399010069816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2091097399010069816'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/11/jstl-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EC%84%B8%ED%8C%85.html' title='jstl  설명 및 세팅'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-8242515946741615551</id><published>2010-10-19T11:20:00.000+09:00</published><updated>2011-01-29T19:56:40.994+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='톰캣 실행 에러'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'>Tomcat 실행 에러 'starting tomcat Server at localhost' has encountered a problem</title><content type='html'>&lt;P&gt;&lt;STRONG&gt;'Starting Tomcat v.6.0 Server at localhost' has encountered a problem.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Serveral ports (80, 8009) required by Tomcat v6.0&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Server at locahost are already in use. Thee server may&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;already be running in another process, or a system &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;process may be using the port. To start this server you&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;will need to stop the other process or change the port&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;number(s).&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위와 같은 에러가 난다면 작업 관리자 창을 열어&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;javaw.exe 를 종료 시키면 에러 없이 잘 실행된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;javaw.exe 는 톰캣 샐행프로세스이다. &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-8242515946741615551?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/8242515946741615551/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/10/tomcat-%EC%8B%A4%ED%96%89-%EC%97%90%EB%9F%AC-starting-tomcat-server-at.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8242515946741615551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8242515946741615551'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/10/tomcat-%EC%8B%A4%ED%96%89-%EC%97%90%EB%9F%AC-starting-tomcat-server-at.html' title='Tomcat 실행 에러 &apos;starting tomcat Server at localhost&apos; has encountered a problem'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-3298449163780892138</id><published>2010-10-12T18:09:00.000+09:00</published><updated>2011-01-29T19:56:40.938+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='환경변수'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat6.0'/><category scheme='http://www.blogger.com/atom/ns#' term='톰캣설치'/><category scheme='http://www.blogger.com/atom/ns#' term='이클립스톰캣연동'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='이클립스'/><title type='text'>tomcat6.0 환경 설정 &amp; java 환경설정 &amp; 이클립스 연동</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;STRONG&gt;1. 자바 환경변수 설정&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;컴퓨터 -&amp;gt; 속성 -&amp;gt; 시스템 변수 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;# JAVA_HOME : C:\Program Files\Java\jdk1.6.0_07&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (자신이 설치한 jdk 경로 지정)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XDlhGA2g41.jpg" style="width:400px;height:376px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XDlhGA2g41.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;# Path : &lt;/STRONG&gt;&lt;STRONG&gt;%JAVA_HOME%\bin;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XNz8r2jcj4.jpg" style="width:400px;height:379px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XNz8r2jcj4.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;# CLASSPATH&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;STRONG&gt;&lt;P&gt;&lt;br /&gt;&lt;FONT color=#ff6600&gt;.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\servlet-api;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;%&lt;/FONT&gt;&lt;FONT color=#ff6600&gt;JAVA_HOME%\lib\jsp-api&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/STRONG&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XfMkmD1AC5.jpg" style="width:400px;height:374px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XfMkmD1AC5.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;* JDK 보다 Oracle 을 나중에 설치할 경우 Oracle 의 설정 중 Java 1.3.1 이 Path 의 앞을 차지하는 경우가 있다. 이럴 경우 다시 앞으로 놓아야 Java -version 시 1.6.0 으로 제대로 설정된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#000000&gt;2. 톰캣 환경변수 설정&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;# CATALINA_HOME : C:\tomcat&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XDB6xbRlNc.jpg" style="width:400px;height:374px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XDB6xbRlNc.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;# CLASSPATH : %CATALINA_HOME%\bin\servlet-api.jar;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XZGdu7QKZL.jpg" style="width:400px;height:378px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XZGdu7QKZL.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#000000&gt;[[ Tomcat 설치 및 환경설정 ]]&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. &lt;U style="text-underline: #0000ff single"&gt;&lt;SPAN style="FONT-FAMILY: 굴림; COLOR: #0000ff; mso-fareast-font-family: 굴림; mso-hansi-font-family: 굴림" lang=EN-US&gt;&lt;A href="http://tomcat.apache.org/"&gt;http://tomcat.apache.org/&lt;/A&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;SPAN style="FONT-FAMILY: 굴림; mso-fareast-font-family: 굴림; mso-hansi-font-family: 굴림" lang=EN-US&gt;&amp;nbsp; -&amp;gt;&amp;nbsp; tomcat6.0 선택&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XCpbi3iyY9.jpg" style="width:400px;height:336px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XCpbi3iyY9.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2. tomcat6.0 다운로드&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XOkna6CoNc.jpg" style="width:400px;height:336px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XOkna6CoNc.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;3. 실행하기&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XObLCozDCZ.jpg" style="width:400px;height:251px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XObLCozDCZ.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XTwnyCwqb5.jpg" style="width:400px;height:311px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XTwnyCwqb5.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XIbIaWGTZb.jpg" style="width:400px;height:310px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XIbIaWGTZb.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XYbDYsWNo4.jpg" style="width:400px;height:312px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XYbDYsWNo4.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XBcgEBHRFQ.jpg" style="width:400px;height:311px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XBcgEBHRFQ.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XJPGiuSVcF.jpg" style="width:400px;height:310px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XJPGiuSVcF.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XdWav5BoDP.jpg" style="width:400px;height:310px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XdWav5BoDP.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;4. &lt;A href="http://www.eclipsetotale.com/tomcatPlugin.html"&gt;http://www.eclipsetotale.com/tomcatPlugin.html&lt;/A&gt;&amp;nbsp;-&amp;gt; tomcat plug-in 다운받기&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XPdiVlCDSp.jpg" style="width:400px;height:214px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XPdiVlCDSp.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XNOrKyQ5S2.jpg" style="width:400px;height:213px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XNOrKyQ5S2.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XRNxLEW1ka.jpg" style="width:400px;height:233px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XRNxLEW1ka.jpg')" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;5. 다운받은 &lt;FONT color=#001ea1&gt;tomcatPluginV321.zip&lt;/FONT&gt;&amp;nbsp; 압출을 푼 후 압축 푼 폴더 안의 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#001ea1&gt;com.sysdeo.eclipse.tomcat_3.2.1&lt;/FONT&gt; 이 폴더를 이클립스 plugins폴더 앞에 복사 해서 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;붙여넣는다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XeqKIexwoG.jpg" style="width:400px;height:261px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XeqKIexwoG.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XW0rjeizpW.jpg" style="width:400px;height:261px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XW0rjeizpW.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XQCM3BwWju.jpg" style="width:400px;height:261px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XQCM3BwWju.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XQAIbP3CJW.jpg" style="width:400px;height:262px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XQAIbP3CJW.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;6. 이클립스 click -&amp;gt; windows -&amp;gt; Preferences 에서 설정하기&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XVM1a7iJp0.jpg" style="width:400px;height:93px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XVM1a7iJp0.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XM4XHizlFk.jpg" style="width:281px;height:365px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XAB0uMzGi8.jpg" style="width:400px;height:424px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XAB0uMzGi8.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XbYJPjSMMP.jpg" style="width:400px;height:424px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XbYJPjSMMP.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XNdAXw3Xb2.jpg" style="width:400px;height:366px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XNdAXw3Xb2.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XI11FpXOdW.jpg" style="width:400px;height:415px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XI11FpXOdW.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XAfjDWW2Uk.jpg" style="width:400px;height:367px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XAfjDWW2Uk.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;7. &amp;nbsp;Tomcat 의 버전이 올라가면서 보안상의 이유로 서블릿을 실행하지 못하도록 설정되었다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; 서블릿을 실행하기 위해서는 다음과 같은 설정을 해주어야한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 컴퓨터 -&amp;gt; 오른쪽 마우스 -&amp;gt; &amp;nbsp;속성 -&amp;gt; 고급 시스템 설정 -&amp;gt; 시스템 설정 -&amp;gt; 고급 -&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 환경변수 -&amp;gt; path 선택 -&amp;gt; 편집 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;%CATALINA_HOME%\conf\web.xml &amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;위의 내용을 추가한다. &lt;br /&gt;&lt;br /&gt;8. Tomcat6.0 -&amp;gt; conf -&amp;gt; web.xml 파일에서 invoker를 포함한 태그의 주석을 해제한다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;servlet&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;servlet-name&amp;gt;&lt;FONT color=#ff6600&gt;invoker&lt;/FONT&gt;&amp;lt;/servlet-name&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;servlet-class&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; org.apache.catalina.servlets.InvokerServlet &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/servlet-class&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;init-param&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;param-value&amp;gt;0&amp;lt;/param-value&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/init-param&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;load-on-startup&amp;gt;2&amp;lt;/load-on-startup&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/servlet&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;servlet-mapping&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;servlet-name&amp;gt;&lt;FONT color=#ff6600&gt;invoker&lt;/FONT&gt;&amp;lt;/servlet-name&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;url-pattern&amp;gt;/servlet/*&amp;lt;/url-pattern&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/servlet-mapping&amp;gt; &lt;br /&gt;&lt;/P&gt;&lt;P&gt;9. 톰캣을 실행해도 아래와 같은 에러가 난다. 톰캣 6.x 버전부터는 서블릿 리로딩에 관련된 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 설정을 해주어야 한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; java.lang.SecurityException: Servlet of class org.apache.catalina.servlets.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; InvokerServlet is privileged and cannot be loaded by this web application&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Tomcat6.0 -&amp;gt; conf -&amp;gt; context.xml 파일을 아래와 같이 수정해야한다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Context &lt;FONT color=#ff6600&gt;reloadable="true" privileged="true"&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;태그안에 주황색으로 표시되어 있는 내용만 입력해 주면 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;10. Tomcat 실행 해보자. 잘 될것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-3298449163780892138?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/3298449163780892138/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/10/tomcat60-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-java-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4-%EC%97%B0%EB%8F%99.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/3298449163780892138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/3298449163780892138'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/10/tomcat60-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-java-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4-%EC%97%B0%EB%8F%99.html' title='tomcat6.0 환경 설정 &amp;amp; java 환경설정 &amp;amp; 이클립스 연동'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-5601283140087286648</id><published>2010-10-07T11:14:00.000+09:00</published><updated>2011-01-29T19:56:40.081+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'>tomcat server.xml 설정</title><content type='html'>&lt;P&gt;tomcat6.0 -&amp;gt; bin -&amp;gt; server.xml 의 파일에서 context&amp;nbsp; 부분의 docbase를 설정해 주어야한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;docbase는 url에서 localhost:8080 다음의 root 경로를 설정하는 부분이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;lt;context docbase="C:\Program Files\root로 설정할 경로를 적어준다" path="/" /&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;만약 docbase를 C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이렇게 설정했다면 webapps폴더 안이 root가 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;url에서 경로를 http://localhost:8080/ 다음에 webapps폴더 안에 있는 파일명을 적어주면 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;즉,&amp;nbsp; 아래와 같은 의미이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;A href="http://localhost:8080/"&gt;http://localhost:8080/&lt;/A&gt;&amp;nbsp;=&amp;nbsp; C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;만약, &amp;nbsp;Host 태그에서 appBase="webapps" 설정되어 있다면 따로 설정하지 않아도 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;Host name="localhost"&amp;nbsp; appBase="webapps"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unpackWARs="true" autoDeploy="true"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xmlValidation="false" xmlNamespaceAware="false"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 이 경우 webapps가 root가 된다. &amp;nbsp;localhost:8000/ 여기가 webapps 폴더 안이 된다.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-5601283140087286648?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/5601283140087286648/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/10/tomcat-serverxml-%EC%84%A4%EC%A0%95.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5601283140087286648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5601283140087286648'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/10/tomcat-serverxml-%EC%84%A4%EC%A0%95.html' title='tomcat server.xml 설정'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-4656663010612903452</id><published>2010-09-30T15:01:00.000+09:00</published><updated>2011-01-29T19:56:37.058+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taod for oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='64bit'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>64bit toad for oracle  ora-12514 리스너 에러</title><content type='html'>&lt;P&gt;os : windows7 64bit &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DB : 32bit client(server)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Toad : 32bit ver.10&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;tns 리스너가 로컬을 찾지 못해 나는 에러.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;listener.ora 파일을 찾아 이렇게 바꿔주자!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SID_LIST_LISTENER =&lt;br /&gt;&amp;nbsp; (SID_LIST =&lt;br /&gt;&amp;nbsp; &amp;nbsp; (SID_DESC =&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (SID_NAME = &lt;FONT color=#ff0000 size=3&gt;&lt;STRONG&gt;orcl&lt;/STRONG&gt;&lt;/FONT&gt;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (ORACLE_HOME = C:\app\kimjinmi\product\11.2.0\dbhome_1)&lt;br /&gt;# &amp;nbsp; &amp;nbsp;&amp;nbsp; (PROGRAM = extproc) 주석처리&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (ENVS = "EXTPROC_DLLS=ONLY:C:\app\kimjinmi\product\11.2.0\dbhome_1\bin\oraclr11.dll")&lt;br /&gt;&amp;nbsp; &amp;nbsp; )&lt;br /&gt;&amp;nbsp; )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;빨간색으로 한부분을 자신의&amp;nbsp; SID 명으로 바꿔준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;toad는 tns 리스너를 통해 DB에 접근하게 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;오라클을 클라이언트가 아닌 서버로 설치할 경우 로컬을 서버로 인식하지 못해 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DB 에 접근할 수 없어 에러가 나타난다.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-4656663010612903452?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/4656663010612903452/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/09/64bit-toad-for-oracle-ora-12514-%EB%A6%AC%EC%8A%A4%EB%84%88-%EC%97%90%EB%9F%AC.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4656663010612903452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4656663010612903452'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/09/64bit-toad-for-oracle-ora-12514-%EB%A6%AC%EC%8A%A4%EB%84%88-%EC%97%90%EB%9F%AC.html' title='64bit toad for oracle  ora-12514 리스너 에러'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-127628452861571111</id><published>2010-04-20T12:22:00.000+09:00</published><updated>2011-01-29T19:56:36.861+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BitmapData'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='비트맵Bitmap'/><category scheme='http://www.blogger.com/atom/ns#' term='비트맵'/><category scheme='http://www.blogger.com/atom/ns#' term='Bitmap'/><title type='text'>8. BitmapData</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;Bitmap이란 픽셀로 이루어진 이미지 데이터를 의미한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;액션스크립트에서는 이 Bitmap 이미지를 편집하여 사용할 수 있다. &lt;/P&gt;&lt;P&gt;액션스크립트에서 Bitmap을 생성하려면 BitmapData 클래스를 이용하여 생성할 수 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 BitmapData 클래스에 대해 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;BitmapData &lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XSyZoGDZU5.bmp" style="width:286px;height:194px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XSyZoGDZU5.bmp')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;BitmapData 는 display 패키지에 포함되어있다.&lt;/P&gt;&lt;P&gt;BitmapData는 기본적으로 Rectagle을 포함하고 있으며, 픽셀 제한이 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;BitmapData 객체의 최대 크기가 8,192픽셀이며 총 픽셀 수는 16,777,216 픽셀을 초과할 수 없다. 따라서 BitmapData 객체의 폭이 8,192 픽셀이면 높이가 2,048 픽셀이어야 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;BitmapData 객체 1픽셀은 16진수로 0x00000000 로 나타내며 AARRGGBB로 표현된다. &lt;/P&gt;&lt;P&gt;AA = alpha, RR = red, GG = green, BB = blue 이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;한 색상은 8bit이고 이것이 ARGB 4개가 하나로 합쳐진 것이므로 32bit 버퍼에 저장된다.&lt;/P&gt;&lt;P&gt;Bitmap 을 생성하기 위해서는 BitmapData 클래스의 BitmapData() 메서드를 이용하면 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XEr9bEELSV.jpg" style="width:370px;height:51px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;BitmapData() 메서드를 이용하여 bitmap을 생성할 수는 있지만 화면에 보여줄 수는 없다.&lt;/P&gt;&lt;P&gt;왜냐면 BitmapData는 DisplayObject가 아니기 때문이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;지금까지 DisplayObject(눈에 보이는 모든 객체)는 addChild()를 통해 화면에 나타내주었다. &lt;/P&gt;&lt;P&gt;하지만 BitmapData는 DisplayObject가 아니므로 addChild() 할 수 없다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;BitmapData 에서 이미지를 생성하여 로드하는 순간 캡쳐를 뜨고 바로 unload()시키기 때문이다.&amp;nbsp; 여기서 캡쳐는 원본이미지를 핸들링할 수 있는 BitmapData 형태로 바꿔주는 것을 말한다.&lt;/P&gt;&lt;P&gt;플래시에서는 캡쳐를 하면 원본을 캡쳐하고, 이 캡쳐된 비트맵 데이터를 가지고 편집을 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 캡쳐를 어떻게 하냐... BitmapData 클래스의 메서드 중에 draw() 라는 메서드를 이용하면 된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XLDFcsHs2L.bmp" style="width:404px;height:83px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Flash Player 또는 AIR 벡터 렌더러를 사용하여 비트맵 이미지에 source라는 파라미터를 그리는 것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;여기서 매개변수 IBitmapDrawable은 인터페이스 클래스이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;IBitmapDrawable (인터페이스 클래스)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;눈에 보이는 모든 것들은 DisplayObject를 상속받는다.&lt;/P&gt;&lt;P&gt;DisplayObject는 모든 눈에 보이는 것들을 만든다. &lt;/P&gt;&lt;P&gt;눈에 보이는 모든 것들 : Sprite extends DisplayObject implements IBitmapDrawable&lt;/P&gt;&lt;P&gt;그래서 눈에 보이는 모든 것들은 IBitmapDrawable 인터페이스 클래스를 가지고 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 어떻게 할까?&amp;nbsp; 아래 보이는 계층구조를 한번 살펴보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XLCidgkOg7.jpg" style="width:434px;height:156px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DisplayObject의 하위클래스로 Bitmap 클래가 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 Bitmap 클래스가 또 어떤 기능을 하는지 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;Bitmap&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XU2vkoXJLu.bmp" style="width:422px;height:177px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Bitmap 클래스는 비트맵 이미지를 표시하는 객체이다. 여기서 비트맵 이미지는 Loader클래스를 이용할 수도 있고, Bitmap() 생성자로 만들 수도 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XcHlWsAzfs.bmp" style="width:371px;height:66px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;파라미터로 BitmapData를 사용한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;음...그렇다면 BitmapData 클래스에서 이미지를 생성하고 편집한 걸 Bitmap 클래스가 화면에 보여준다는 말이군..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 예제를 한번 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-127628452861571111?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/127628452861571111/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/8-bitmapdata.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/127628452861571111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/127628452861571111'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/8-bitmapdata.html' title='8. BitmapData'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-4466097879856912351</id><published>2010-04-16T01:17:00.000+09:00</published><updated>2011-01-29T19:56:36.820+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MotionTween'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='MovieClip'/><category scheme='http://www.blogger.com/atom/ns#' term='motion'/><title type='text'>7. Motion _ (2) 재생 버튼 모션 만들기</title><content type='html'>&lt;P&gt;이번에는 버튼으로 모션을 제어하는 예제를 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.display.MovieClip;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;&lt;br /&gt;public class MotionExample02 extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function MotionExample02()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super(); // Sprite 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; pan_mc.stop(); // 펜 초기 설정 정지&lt;br /&gt;&lt;br /&gt;&amp;nbsp; play_mc.stop(); // 재생버튼 초기 설정 정지&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // 각 버튼 이벤트 등록&lt;br /&gt;&amp;nbsp; play_mc.addEventListener(MouseEvent.CLICK, playButtonClickHandler); &lt;br /&gt;&amp;nbsp; stop_mc.addEventListener(MouseEvent.CLICK, stopButtonClickHandler); &lt;br /&gt;&amp;nbsp; prev_mc.addEventListener(MouseEvent.CLICK, prevButtonClickHandler); &lt;br /&gt;&amp;nbsp; next_mc.addEventListener(MouseEvent.CLICK, nextButtonClickHandler); &lt;br /&gt;&lt;br /&gt;&amp;nbsp; // 각 버튼 마우스 오버시 손모양&lt;br /&gt;&amp;nbsp; setButtons(play_mc); &lt;br /&gt;&amp;nbsp; setButtons(stop_mc);&lt;br /&gt;&amp;nbsp; setButtons(prev_mc);&lt;br /&gt;&amp;nbsp; setButtons(next_mc);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 버튼 모드 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function setButtons(target:MovieClip):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; target.buttonMode = true;&lt;br /&gt;&amp;nbsp; target.useHandCursor = true;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 재생 버튼 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function playButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(play_mc.currentFrame == 1) // // 재생버튼이면&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;play_mc.gotoAndStop(2); // 일시정지 버튼으로 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;pan_mc.play(); // 재생&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;pan_mc.addEventListener(Event.ENTER_FRAME, panStopHandler); // 펜 정지 이벤트 수신 등록&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else // 일시정지 버튼이면&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;play_mc.gotoAndStop(1); // 재생 버튼으로&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;pan_mc.stop(); // 펜 정지&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 정지 버튼 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function stopButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; play_mc.gotoAndStop(1); // 재생 버튼 모드&lt;br /&gt;&amp;nbsp; pan_mc.gotoAndStop(1); // // 처음 재생 모드&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 펜 정지 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function panStopHandler(event:Event):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(pan_mc.currentFrame == pan_mc.totalFrames) // 프레임이 끝나면&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;pan_mc.stop(); // 재생 정지&lt;br /&gt;&amp;nbsp; &amp;nbsp;play_mc.gotoAndStop(1); // 처음 재생 모드로&lt;br /&gt;&amp;nbsp; &amp;nbsp;pan_mc.removeEventListener(Event.ENTER_FRAME, panStopHandler); // 수신 이벤트 제거&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 이전 버튼 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function prevButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(pan_mc.currentFrame == 1) // 첫 프레임이면&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;pan_mc.gotoAndStop(pan_mc.totalFrames); //마지막 프레임으로 &lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;pan_mc.prevFrame(); // 이전 프레임으로&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 다음 버튼 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function nextButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(pan_mc.currentFrame == pan_mc.totalFrames) // 마지막 프레임이면&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;pan_mc.gotoAndStop(1); // 첫 프레임으로&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;pan_mc.nextFrame(); // 다음 프레임으로&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XP9qVXkPnt.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XP9qVXkPnt.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;아주 간단한 예제를 한번 만들어 보았다. 음..잘되는 것 같다. 하지만 여기에는 많이 문제들이 숨어 있다. &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-4466097879856912351?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/4466097879856912351/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/7-motion-2-%EC%9E%AC%EC%83%9D-%EB%B2%84%ED%8A%BC-%EB%AA%A8%EC%85%98-%EB%A7%8C%EB%93%A4%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4466097879856912351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4466097879856912351'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/7-motion-2-%EC%9E%AC%EC%83%9D-%EB%B2%84%ED%8A%BC-%EB%AA%A8%EC%85%98-%EB%A7%8C%EB%93%A4%EA%B8%B0.html' title='7. Motion _ (2) 재생 버튼 모션 만들기'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-1186419103588404131</id><published>2010-04-14T18:10:00.000+09:00</published><updated>2011-01-29T19:56:36.743+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='addEventListener()'/><category scheme='http://www.blogger.com/atom/ns#' term='MotionTween'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='MovieClip'/><category scheme='http://www.blogger.com/atom/ns#' term='motion'/><title type='text'>7. Motion _(1) 간단한 모션 만들기</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;간단한 모션을 한번 만들어보자. 모션을 만들위해서는 MovieClip 클래스를 이용하여 만들어야한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;액션스크립트 1.0, 2.0 에서는 MovieClip을 많이 사용하였다. 하지만 MovieClip을 많이 사용하게 되면 과도한 메모리 과부하가 일어나는 문제가 발생하는 등 여러가지 단점이 많았다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그래서 액션스크립트 3.0 에서는 이를 극복하기 위해 새로운 클래스를 만들었다. &lt;/P&gt;&lt;P&gt;주로 Sprite 클래스를 이용한다. 그렇다고해서 MovieClip을 사용하지 않는다는 것은 아니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;# MovieClip을 사용하는 경우&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. 타임라인을 이용하여 무비를 제어할때 : 애니메이션, 모션 &lt;/P&gt;&lt;P&gt;2. Scean 및 FrameLabel을 이용하여 작업할때&lt;/P&gt;&lt;P&gt;3. 타임라인 PLAY HEAD를 조작하는 작업을 할때&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위와 같은 경우에는 MovieClip을 이용하여 작업을 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 MovieClip 클래스에 대해 한번 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XH09aXF2Dl.bmp" style="width:417px;height:272px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;MovieClip 객체는 Sprite 객체와 다르게 타임라인이 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;MovieClip은 이렇게 많은 걸 상속받고 있다. 그래서 무겁다고 하는 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 MovieClip 클래스에서 주로 쓰이는 속성과 메서드에는 어떤 것이 있는지 한번 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;속성&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XG4QXSXHIJ.jpg" style="width:327px;height:67px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XWpq0uR1lJ.jpg" style="width:332px;height:51px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XWpq0uR1lJ.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;메서드&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XYHanPxXxk.jpg" style="width:395px;height:377px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;주로 쓰이는 메서드는 gotoAndStop(), gotoAndPlay(), nextFrame(), prevFrame(), stop() 이 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;자 그럼 이제 예제로 간단한 모션을 만들어 보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;먼저 플래시 파일을 하나 만들자. 새로 만든 파일에서 ctrl + F8번을 눌러 무비클립 심볼을 &lt;/P&gt;&lt;P&gt;하나 만든다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XcvmVGzRP7.jpg" style="width:454px;height:384px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런다음 이 무비클립의 인스턴스네임을 rect_mc로 하자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XWTfLm2EYu.bmp" style="width:277px;height:117px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 타임라인이 아래와 같이 MovieClip심볼이 생성되어 나타난다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XAhAlKlbma.jpg" style="width:380px;height:146px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;rect_mc 무비클립을 더블클릭하고 들어가서 사각형을 한번더 무비클립으로 만들어준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XG9joEg3pt.bmp" style="width:443px;height:357px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XG9joEg3pt.bmp')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이 무비클립의 인스턴스네임은 inner_mc라고 하자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XGZm5MSRkt.bmp" style="width:283px;height:113px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런 다음 타임라인에서 1프레임을 클릭하고 오른쪽 마우스를 클린한다음 Create Classic Tween을 클릭한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XFlAV8XYkm.bmp" style="width:464px;height:144px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런다음 30프레임을 클릭하고 F6을 눌러 프레임을 추가한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XTT0eNBmaf.jpg" style="width:449px;height:144px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런다음 추가한 30프레임에서 사각형을 오른쪽으로 이동시킨다. 그럼 아래와 같이 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XH6FTxx6MC.bmp" style="width:472px;height:502px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XH6FTxx6MC.bmp')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;마지막으로 properties에서 Class를 아래와 같이 지정한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XKzyinhMWv.bmp" style="width:284px;height:216px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;중요한것은 rect_mc 무비클립안에서 inner_mc 라는 무비클립을 하나더 만들어주는 것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;여기서 왜 무비클립을 만들고 또 그 안에 무비클립을 만드냐 하면.. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;모션 줄때 shape으로는 액션을 줄수가 없다.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&amp;nbsp;꼭 무비클립으로 만든 다음에 모션을 줘야한다. &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;또한 모션을 줄 땐 인스턴스네임이 필요하므로 꼭 인스턴스네임을 지정해 줘야 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 이제 MotionExample01.as 파일을 만들어 보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;&lt;br /&gt;public class MotionExample01 extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function MotionExample01()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; rect_mc.buttonMode = true; // 사각형 마우스 오버시 손모양&lt;br /&gt;&lt;br /&gt;&amp;nbsp; rect_mc.stop(); // 초기 상태 정지 설정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; rect_mc.addEventListener(MouseEvent.CLICK, clickHandler); // 마우스 클릭 이벤트 등록&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사각형 클릭&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function clickHandler(event:Event):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; rect_mc.addEventListener(Event.ENTER_FRAME, moveRectHandler); // 사각형 이동 이벤트 등록&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사각형 이동&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function moveRectHandler(event:Event):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(rect_mc.currentFrame == rect_mc.totalFrames) // 현재 프레임이 마지막 프레임이면&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;rect_mc.stop(); // 사각형 정지 : 타임라인 정지&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;rect_mc.removeEventListener(Event.ENTER_FRAME, clickHandler); // 사각형 이동 이벤트 제거&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;rect_mc.play(); // 사각형 이동 : 타임라인 재생&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XdZ3HNy0uC.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XdZ3HNy0uC.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;자 이제 실행해보자. 위의 파란색 사각형을 클립해보자. 잘 실행되는가? 그럼 간단한 모션만들기는 성공!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;다음에는 버튼을 추가하여 모션을 제어하는 조금더 복잡한 모션예제를 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-1186419103588404131?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/1186419103588404131/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/7-motion-1-%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%AA%A8%EC%85%98-%EB%A7%8C%EB%93%A4%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/1186419103588404131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/1186419103588404131'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/7-motion-1-%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%AA%A8%EC%85%98-%EB%A7%8C%EB%93%A4%EA%B8%B0.html' title='7. Motion _(1) 간단한 모션 만들기'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-2364434229141045916</id><published>2010-04-09T04:12:00.000+09:00</published><updated>2011-01-29T19:56:36.652+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='APMSETUP'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='FileUpload'/><category scheme='http://www.blogger.com/atom/ns#' term='APM_setup'/><category scheme='http://www.blogger.com/atom/ns#' term='FileReference'/><category scheme='http://www.blogger.com/atom/ns#' term='APM 설치'/><category scheme='http://www.blogger.com/atom/ns#' term='서버다운'/><category scheme='http://www.blogger.com/atom/ns#' term='php서버'/><category scheme='http://www.blogger.com/atom/ns#' term='서버연동'/><title type='text'>FileReference _ (1) 파일 업로드 (PHP-APM 서버 연동)</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;파일 업로드 예제를 만들기 전에 필요한 것들이 몇가지 있다. 파일을 올릴 서버가 필요하며, 서버랑 연동할 php파일이 필요하다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;먼저 웹 서버를 구축 해보자. 웹 서버로 APMSETUP을 사용하겠다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;APMSETUP은 APM(Aphach, PHP, MySQL)를 사용할 수 있도록 자동으로 설치, 설정해주는 프로그램이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. 주소창에 &lt;A href="http://www.apmsetup.com/" target=_self&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;http://www.apmsetup.com&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp; 이라고 쳐보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XOD0vZ3oBY.bmp" style="width:488px;height:506px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위와 같은 화면이 나온다. 그럼 저기에서 &amp;nbsp;&lt;A href="http://www.apmsetup.com/download.php" target=_blank&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;다운로드&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt; 메뉴를 클릭해보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock left" style="float: left; margin-right: 10px;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XDb5r73ZCH.bmp" style="width:447px;height:415px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XDb5r73ZCH.bmp')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 위와 같이 APMSETUP을 다운받아보자. 다운로드를 클릭하고 저장을 누른다.&lt;/P&gt;&lt;P&gt;APMSETUP을 실행시켜보자. 그럼 아래 그림 그림 같이 나온다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XGZSLAm6aK.bmp" style="width:313px;height:198px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;언어를 선택하고 오케이를 누르면 아래와 같은 화면이 나온다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XDiCB8wVOm.bmp" style="width:443px;height:270px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XDiCB8wVOm.bmp')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;다음 버튼을 계속누른다. 알아서 세팅이 된다. 그럼 마지막에 아래와 같이 나온다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XJunXoQ5bJ.jpg" style="width:446px;height:271px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XJunXoQ5bJ.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;마침을 누른다. 와~! 드디어 설치가 완료되었다. 바탕화면과 작업표시줄을 확인해보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XJybVViIbc.jpg" style="width:79px;height:29px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XBRi4ESI5P.jpg" style="width:113px;height:103px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;자 이제 그럼 로컬 서버가 잘 구축되었는지 확인해보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;주소창에 &lt;A href="http://127.0.0.1/"&gt;http://127.0.0.1&lt;/A&gt; 을 쳐보자. 그럼 아래와 같이 나온다. 이것이 개인 로컬 서버이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XQnm65Sfbj.bmp" style="width:485px;height:510px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위치는 C:/APM_Setup/htdocs 이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XYjE1RSgaz.bmp" style="width:186px;height:195px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;즉, 127.0.0.1의 위치는 C:/APM_Setup/htdocs 폴더가 된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;자 이제 준비는 다 끝났다. 그럼 이제 파일 업로드를 한번 만들어보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 그림 같이 C:/APM_Setup/htdocs 폴더 안에 upload파일을 하나 만들자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이 폴더는 업로드한 파일이 올려질 폴더이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그리고나서 서버랑 연동할 upload.php 파일을 만들자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;먼저 upload.php 파일을 작성해 보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;&amp;lt;?php&lt;br /&gt;$errors = array();&lt;br /&gt;$data = "";&lt;br /&gt;$success = "false";&lt;br /&gt;&lt;br /&gt;function return_result($success,$errors,$data) {&lt;br /&gt;echo("&amp;lt;?xml version=\"1.0\" encoding=\"utf-8\"?&amp;gt;");&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;results&amp;gt;&lt;br /&gt;&amp;lt;success&amp;gt;&amp;lt;?=$success;?&amp;gt;&amp;lt;/success&amp;gt;&lt;br /&gt;&amp;lt;?=$data;?&amp;gt;&lt;br /&gt;&amp;lt;?=echo_errors($errors);?&amp;gt;&lt;br /&gt;&amp;lt;/results&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function echo_errors($errors) {&lt;br /&gt;for($i=0;$i&amp;lt;count($errors);$i++) {&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;error&amp;gt;&amp;lt;?=$errors[$i];?&amp;gt;&amp;lt;/error&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;switch($_REQUEST['action']) {&lt;br /&gt;case "upload":&lt;br /&gt;&lt;br /&gt;$file_temp = $_FILES['file']['tmp_name'];&lt;br /&gt;$file_name = $_FILES['file']['name'];&lt;br /&gt;$file_path = $_SERVER['DOCUMENT_ROOT']."/upload";&lt;br /&gt;&lt;br /&gt;//checks for duplicate files&lt;br /&gt;if(!file_exists($file_path."/".$file_name)) {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; //complete upload &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; $filestatus = move_uploaded_file($file_temp,$file_path."/".$file_name);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; if(!$filestatus) {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; $success = "false";&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; array_push($errors,"Upload failed. Please try again.");&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;$success = "false";&lt;br /&gt;array_push($errors,"File already exists on server.");&lt;br /&gt;}&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;default:&lt;br /&gt;$success = "false";&lt;br /&gt;array_push($errors,"No action was requested.");&lt;br /&gt;}&lt;br /&gt;return_result($success,$errors,$data);&lt;br /&gt;?&amp;gt;&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 이제 FileUploadExample.as 파일을 작성해 보도록하자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.*;&lt;br /&gt;import flash.net.FileFilter;&lt;br /&gt;import flash.net.FileReference;&lt;br /&gt;import flash.net.URLRequest;&lt;br /&gt;import flash.net.URLVariables;&lt;br /&gt;import flash.net.URLRequestMethod;&lt;br /&gt;&lt;br /&gt;public class FileUploadExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; private const UPLOAD_HOST:String = "http://127.0.0.1/upload.php";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function FileUploadExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super(); &lt;br /&gt;&amp;nbsp; setButton(); &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private var uploadURL:URLRequest;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private var file:FileReference;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function setButton():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; select_btn.label = "Select"; &lt;br /&gt;&amp;nbsp; upload_btn.label = "Upload"; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; select_btn.addEventListener(MouseEvent.CLICK, selectButtonClickHandler); &lt;br /&gt;&amp;nbsp; upload_btn.addEventListener(MouseEvent.CLICK, uploadButtonClickHandler); &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function configureListener():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; file.addEventListener(IOErrorEvent.IO_ERROR, fileIOErrorHandler);&lt;br /&gt;&amp;nbsp; file.addEventListener(ProgressEvent.PROGRESS, fileProgressHandler);&lt;br /&gt;&amp;nbsp; file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, fileDataUploadCompleteHandler);&lt;br /&gt;&amp;nbsp; file.addEventListener(Event.SELECT, fileSelectHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function selectButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(!file)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;file = new FileReference();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; configureListener();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; file.browse(); &amp;nbsp;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function uploadButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; var requestData:URLVariables = new URLVariables();&lt;br /&gt;&amp;nbsp;&amp;nbsp; requestData.action = "upload"; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; var request:URLRequest = new URLRequest(UPLOAD_HOST);&lt;br /&gt;&amp;nbsp;&amp;nbsp; request.method = URLRequestMethod.POST; &lt;br /&gt;&amp;nbsp;&amp;nbsp; request.data = requestData;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; file.upload(request, "file");&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function fileIOErrorHandler(event:IOErrorEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; trace("File upload IO Error 발생.", "Error"); &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function fileProgressHandler(event:ProgressEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var file:FileReference = FileReference(event.target);&lt;br /&gt;&amp;nbsp; trace("progressHandler name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function fileDataUploadCompleteHandler(event:DataEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var xmlData:XML = new XML(event.data); &lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(xmlData.success == "true") &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;trace("File Upload Complete", "Success");&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;trace(xmlData.error, "Error");&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function fileSelectHandler(event:Event):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; select_btn.enabled = true;&lt;br /&gt;&amp;nbsp; fname_txt.text = file.name;&lt;br /&gt;&amp;nbsp; fsize_txt.text = file.size + "bytes"; &lt;br /&gt;&amp;nbsp; ftype_txt.text = file.type;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XIEL5wlQTb.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XIEL5wlQTb.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;자 이제 실행해보자. 그럼 C:/APM_Setup/htdocs/upload 폴더 안에 업로드한&amp;nbsp; 파일이 올라갔을 것이다. 참고로, 여기서는 실행이되지 않으며, APMSETUP을 설치한 분들만 업로드가 가능하다. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-2364434229141045916?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/2364434229141045916/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/filereference-1-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C-php-apm-%EC%84%9C%EB%B2%84-%EC%97%B0%EB%8F%99.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2364434229141045916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2364434229141045916'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/filereference-1-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C-php-apm-%EC%84%9C%EB%B2%84-%EC%97%B0%EB%8F%99.html' title='FileReference _ (1) 파일 업로드 (PHP-APM 서버 연동)'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-4114765993296275795</id><published>2010-04-09T01:19:00.000+09:00</published><updated>2011-01-29T19:56:36.603+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='URLRequest'/><category scheme='http://www.blogger.com/atom/ns#' term='FileUpload'/><category scheme='http://www.blogger.com/atom/ns#' term='FileReference'/><title type='text'>FileReference</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;FileReference 클래스&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;FileReference 클래스는 사용자 컴퓨터와 서버사이에서 파일을 업로드나 다운로드를 할 수 있는 방법을 제고하는 클래스이다. 운영체제 대화상자는 업로드할 파일이나 다운로드할 위치를 선택하라고 표시된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;각각의 FileReference 객체는 사용자 디스크의 단일 파일을 나타내며, 속성으로 파일 사이즈, 타입, 이름, 생성날짜, 수정날짜 등의 정보가 포함되어 있는 속성을 가지고 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XLV905yfzH.jpg" style="width:427px;height:195px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;참조 : &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;A href="https://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/net/FileReference.html" target=_blank&gt;&lt;FONT color=#ff6600&gt;https://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/net/FileReference.html&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 속성과 메서드에 대해 간단하게 살펴보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;# 속성&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/Xapb551C8e.jpg" style="width:391px;height:401px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위에서 설명했던데로 파일 정보에 관한 속성들이 있다. 이것은 예제를 통해 하나씩 알아보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;# Method&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XdRqw2mVuh.jpg" style="width:393px;height:412px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;메서드에는 파일을 업로드, 다운로드 할 수 있는 메서드들이 있다. 이것도 예제를 통해 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런데 업로드, 다운로드 메서드에서 매개변수 URLRequest가 있다. 흠..그럼 이 URLRequest가 뭔지 알아야겠군, 그럼 한번 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff4c4c&gt;&lt;STRONG&gt;URLRequest 클래스&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;하나의 HTTP 요청에 포함된 모든 정보를 가진다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;URLRequest 객체는 Loader, URLStream 및 URLLoader 클래스의 &lt;FONT face="Courier New"&gt;load()&lt;/FONT&gt; 메서드 및 URL 다운로드를 시작하는 기타 로드 작업에 전달된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XUCVJVyiEy.jpg" style="width:296px;height:179px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#808000&gt;FileReference 클래스의 &lt;FONT face="Courier New"&gt;upload()&lt;/FONT&gt;및 &lt;FONT face="Courier New"&gt;download()&lt;/FONT&gt;메서드에도 전달됩니다. &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;즉, 외부에서 파일을 가져오기위한 클래스로 통신을 하기위해 기본적으로 갖추어야할 클래스이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XSo80FBli1.jpg" style="width:397px;height:299px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;자, 그럼 이제 URLRequest 클래스에 대해서도 알봤으니 예제를 한번 만들어보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-4114765993296275795?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/4114765993296275795/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/filereference.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4114765993296275795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4114765993296275795'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/filereference.html' title='FileReference'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-1967029673523588996</id><published>2010-04-08T23:34:00.000+09:00</published><updated>2011-01-29T19:56:36.518+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='마우스드래그'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='스크롤바'/><category scheme='http://www.blogger.com/atom/ns#' term='scrollbar'/><title type='text'>6. 스크롤바 _ (2) 간단한 스크롤바 만들기(마우스 클릭)</title><content type='html'>&lt;P&gt;저번에 만들었던 스크롤바는 마우스로 Drag &amp;amp; Drog으로 bar를 움직이는 스크롤바였다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그렇다면 이번에는 bar를 움직이지 않고 마우스로 line을 클릭하였을 때 bar가 line을 클릭한위치에 오도록 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://butibutiuk.textcube.com/35" target=_blank&gt;&lt;FONT color=#ff6600&gt;(1) 간단한 스크롤바 만들기 &lt;/FONT&gt;&lt;/A&gt;예제 코드와 플래시 파일을 조금 수정하였다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;먼저 플래시 파일의 line을 무비클립으로 만들어 주고 인스턴스명을 line_mc로 하였다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;수정된 코드는 아래와 같다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package classes.display&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.geom.Rectangle;&lt;br /&gt;&lt;br /&gt;public class ScrollBarExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function ScrollBarExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super(); // Sprite 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.buttonMode = true; // 스크롤바 마우스 오버시 손모양&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // 스크롤바 마우스다운 이벤트 등록&lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.addEventListener(MouseEvent.MOUSE_DOWN, barMouseDownHandler);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // 스크롤바 라인 클릭 이벤트 등록&lt;br /&gt;&amp;nbsp; scrollBar_mc.line_mc.addEventListener(MouseEvent.CLICK, lineClickHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 스크롤바 라인 최소값&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;var min:Number = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 스크롤바 라인 최대값&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;var max:Number = 300;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 스크롤바 라인 클릭 위치&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;var pos:Number;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 스크롤바 라인 클릭&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function lineClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // 라인 클릭시 스크롤바 클릭 지점으로 이동 &lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.x = scrollBar_mc.line_mc.mouseX;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // 라인 클릭 지점 위치 값 표시 &lt;br /&gt;&amp;nbsp; showValue(event);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 스크롤바 마우스 다운&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function barMouseDownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // 스크롤바 이동 시 값 표시 이벤트 등록&lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.addEventListener(Event.ENTER_FRAME, showValue); &lt;br /&gt;&lt;br /&gt;&amp;nbsp; var bounds:Rectangle = new Rectangle(0, 0, 300, 0); // 드래그 영역 지정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // startDrag(lockCenter : Boolean,&amp;nbsp; bounds : Rectangle)&lt;br /&gt;&amp;nbsp; // lockCenter : 마우스 클릭 지점을 중심으로 lock 됨&lt;br /&gt;&amp;nbsp; // bounds : 제한 영역 지정&lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.startDrag(false, bounds); // 드래그 시작&lt;br /&gt;&lt;br /&gt;&amp;nbsp; //화면 전체 영역에서 마우스 업 되도록 이벤트 등록 &lt;br /&gt;&amp;nbsp; stage.addEventListener(MouseEvent.MOUSE_UP, barMouseUpHandler); &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 스크롤바 마우스 업&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function barMouseUpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // 스크롤바 이동 시 값 표시 이벤트 리스너 제거 &lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.removeEventListener(Event.ENTER_FRAME, showValue);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.stopDrag(); // 드래그 멈춤&lt;br /&gt;&lt;br /&gt;&amp;nbsp; //화면 전체 영역 이벤트 리스너 제거&lt;br /&gt;&amp;nbsp; stage.removeEventListener(MouseEvent.MOUSE_UP, barMouseUpHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 위치 값 출력&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Math.round()&amp;nbsp; 반올림&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비례식 &amp;nbsp; (300 - 0) : (bar_mc.x - 0) = (max - min) : (pos - min)&lt;br /&gt;&amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; (bar_mc.x - 0) X (max - min) = (300 - 0) X (pos - min)&lt;br /&gt;&amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pos = (bar_mc.x X(max - min)) / 300 + min&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function showValue(event:Event):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // 클릭 지점 위치 계산 : 비례식 사용&lt;br /&gt;&amp;nbsp; pos = (scrollBar_mc.bar_mc.x * (max - min)) / 300 + min;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // scrollBar_mc.bar_mc.x 값 Number, scrollBar_mc.txt.text는 Sring이므로 &lt;br /&gt;&amp;nbsp; // String으로 Casting(형변환) 시켜줌&lt;br /&gt;&amp;nbsp; scrollBar_mc.txt.text = String(Math.round(scrollBar_mc.bar_mc.x));&lt;br /&gt;&amp;nbsp;} &lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XeM1P2lapZ.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XeM1P2lapZ.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;회색라인을 클랙해보자. 스크롤바가 클릭 지점 위치로 오는가? 값도 잘 나오는가? 음..&lt;/P&gt;&lt;P&gt;실행이 잘 된다. 그럼 다음시간에는 이를 활용한 예제를 정말로 만들어 보자. &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-1967029673523588996?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/1967029673523588996/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/6-%EC%8A%A4%ED%81%AC%EB%A1%A4%EB%B0%94-2-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%8A%A4%ED%81%AC%EB%A1%A4%EB%B0%94-%EB%A7%8C%EB%93%A4%EA%B8%B0%EB%A7%88%EC%9A%B0%EC%8A%A4-%ED%81%B4%EB%A6%AD.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/1967029673523588996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/1967029673523588996'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/6-%EC%8A%A4%ED%81%AC%EB%A1%A4%EB%B0%94-2-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%8A%A4%ED%81%AC%EB%A1%A4%EB%B0%94-%EB%A7%8C%EB%93%A4%EA%B8%B0%EB%A7%88%EC%9A%B0%EC%8A%A4-%ED%81%B4%EB%A6%AD.html' title='6. 스크롤바 _ (2) 간단한 스크롤바 만들기(마우스 클릭)'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-1386216693306592379</id><published>2010-04-07T16:31:00.000+09:00</published><updated>2011-01-29T19:56:36.466+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='스크롤바'/><category scheme='http://www.blogger.com/atom/ns#' term='scrollbar'/><category scheme='http://www.blogger.com/atom/ns#' term='drag&amp;amp;drop'/><title type='text'>6. 스크롤바 _ (1) 간단한 스크롤바 만들기</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;스크롤바를 이용하여 볼륨, 콘텐츠 등 다양하게 스크롤바를 활용할 수 있다. 그럼 간단하게 스크롤바를 한번 만들어보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;1.&lt;/STRONG&gt;&amp;nbsp; 폴더를 하나 만들고 그안에 ScrollBarExample.as와 ScrollBarExample.fla을 만든다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XHSINglQfb.jpg" style="width:186px;height:94px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;ScrollBarExample.fla 파일의 properties에서 Class를 지정한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XFmOd8H1d1.jpg" style="width:382px;height:278px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XBlrUvXMZ7.bmp" style="width:278px;height:216px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;2.&lt;/STRONG&gt; 플래시 파일에서&amp;nbsp; ctrl + F8 을 눌러 무비클립을 하나 만들고, 그 안에 또 하나의 무비클립을 만든다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XPly623ynC.bmp" style="width:451px;height:107px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이 무비클립은 스크롤바를 이동시킬 무비클립이다. 위의 그림에서 파란색 무비클립이 이에 해당한다. &amp;nbsp;그리고 라인 하나를 만들고, 이동한 무비클립의 x속성 값을 보여줄 텍스트도 하나 만든다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;3.&lt;/STRONG&gt; 인스턴스명을 적어준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; 먼저 처음 만들었던&amp;nbsp; 스크롤바, 라인, 텍스트 3개를 묶어 놓은 무비클립의 인스턴스명을&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; scrollBar_mc로 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XNFGs1HsYg.bmp" style="width:429px;height:118px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XHx0hjSRyl.bmp" style="width:281px;height:79px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2 에서 만들었던 무비클립안의 스크롤바에 해당하는 파란색 무비클립의 인스턴스명을 bar_mc로 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XPly623ynC.bmp" style="width:451px;height:107px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XfFnPaWKUI.bmp" style="width:277px;height:77px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;텍스트는 외부에서 컨트롤할 수 있는 Dynamic Text로 지정하고 인스턴스명은 txt로 한다. &lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XX7PzSFTCC.bmp" style="width:279px;height:73px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;4. ScrollBar.as 파일을 작성한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.geom.Rectangle;&lt;br /&gt;&lt;br /&gt;public class ScrollBarExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function ScrollBarExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super(); // Sprite 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.buttonMode = true; // 스크롤바 마우스 오버시 손모양&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // 스크롤바 마우스다운 이벤트 등록&lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.addEventListener(MouseEvent.MOUSE_DOWN, barMouseDownHandler); &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 스크롤바 마우스 다운&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function barMouseDownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // 스크롤바 이동 시 값 표시 이벤트 등록&lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.addEventListener(Event.ENTER_FRAME, showValue); &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; var bounds:Rectangle = new Rectangle(0, 0, 300, 0); // 드래그 영역 지정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // startDrag(lockCenter : Boolean,&amp;nbsp; bounds : Rectangle)&lt;br /&gt;&amp;nbsp; // lockCenter : 마우스 클릭 지점을 중심으로 lock 됨&lt;br /&gt;&amp;nbsp; // bounds : 제한 영역 지정&lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.startDrag(false, bounds); // 드래그 시작&lt;br /&gt;&lt;br /&gt;&amp;nbsp; //화면 전체 영역에서 마우스 업 되도록 이벤트 등록 &lt;br /&gt;&amp;nbsp; stage.addEventListener(MouseEvent.MOUSE_UP, barMouseUpHandler); &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 스크롤바 마우스 업&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function barMouseUpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // 스크롤바 이동 시 값 표시 이벤트 리스너 제거 &lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.removeEventListener(Event.ENTER_FRAME, showValue);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; scrollBar_mc.bar_mc.stopDrag(); // 드래그 멈춤&lt;br /&gt;&lt;br /&gt;&amp;nbsp; //화면 전체 영역 &amp;nbsp;마우스 업&amp;nbsp; 이벤트 리스너 제거&lt;br /&gt;&amp;nbsp; stage.removeEventListener(MouseEvent.MOUSE_UP, barMouseUpHandler); &amp;nbsp;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; * &amp;nbsp;텍스트 필드&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function showValue(event:Event):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // scrollBar_mc.bar_mc.x 값 Number, scrollBar_mc.txt.text는 Sring이므로 &lt;br /&gt;&amp;nbsp; // String으로 Casting(형변환) 시켜줌&lt;br /&gt;&amp;nbsp; scrollBar_mc.txt.text = String(Math.round(scrollBar_mc.bar_mc.x));&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XYmaTlxFOR.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XYmaTlxFOR.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위에서 Drag &amp;amp; Drag에 대한 내용이 나온다. 이해가 잘 되지 않는다면 &lt;A href="http://butibutiuk.textcube.com/18" target=_blank&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;여기&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;를 참조하자.&lt;/P&gt;&lt;P&gt;또 Rectangle 클래스에 대해서도 나오는 이것도 잘 이해가 가지 않는다면 &lt;A href="http://butibutiuk.textcube.com/10" target=_blank&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;여기&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;를 참조하자.&lt;/P&gt;&lt;P&gt;실행이 잘 되는가? 그럼 간단한 스크롤바를 만들어보았다. 다음번에 이 스크롤바를 적용한 예제를 만들어보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-1386216693306592379?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/1386216693306592379/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/6-%EC%8A%A4%ED%81%AC%EB%A1%A4%EB%B0%94-1-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%8A%A4%ED%81%AC%EB%A1%A4%EB%B0%94-%EB%A7%8C%EB%93%A4%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/1386216693306592379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/1386216693306592379'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/6-%EC%8A%A4%ED%81%AC%EB%A1%A4%EB%B0%94-1-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%8A%A4%ED%81%AC%EB%A1%A4%EB%B0%94-%EB%A7%8C%EB%93%A4%EA%B8%B0.html' title='6. 스크롤바 _ (1) 간단한 스크롤바 만들기'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-5021916624107053679</id><published>2010-04-07T01:38:00.000+09:00</published><updated>2011-01-29T19:56:36.388+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='Callback'/><category scheme='http://www.blogger.com/atom/ns#' term='parent'/><title type='text'>parent 대신 callback 함수 사용하기</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;Actionscript 2.0 에서는 parent를 사용하였다. Actionscript 3.0 에서는 &lt;FONT color=#ff6600&gt;parent를 절대 사용하면 안되다. 무조건!!!! &lt;/FONT&gt;왜냐하면 parent를 사용하게 되면 종속관계에 있어 강한 결합이 되어 유지보수 등이 어려워진다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;parent를 쓰지 않고 부모 클래스에 접근하는&amp;nbsp; 방법은 두가지가 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;Event &lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XaurRCCdde.jpg" style="width:439px;height:340px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Main 클래스가 있고 Sample 클래스가 있다. 그런데 Sample 클래스에서 Main 클래스에 값을 전달하고 싶은때 Sample 클래스의 메서드에서 dispatcEvent를 발생시켜 Event 를 통해 메인에 값을 전달할 수 있다. 이벤트에 대해서는 다음에 자세히 알아보도록 하자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;CallBack 함수 &lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XdLGedgsaG.jpg" style="width:203px;height:324px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;callback 함수를 사용하게 되면 이벤트 객체 만드는 시간이 줄어들고, 또한 다이렉트로 연결할 수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;예제를 한번 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. 폴더 하나를 만들고 그 폴더안에 플래시 파일 하나와 CallBack.as파일 하나를 만든다. &lt;/P&gt;&lt;P&gt;2. 그 안에 classes라는 폴더를 하나 더 만든다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/Xa7kLFhpN6.jpg" style="width:190px;height:92px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;3. classes 폴더 안에 display라는 폴더를 하나더 만든다. &amp;nbsp; &amp;nbsp;display 폴더 안에 Seed.as 파일&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 을 하나 만든다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XHTbTaXHQy.jpg" style="width:195px;height:114px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;4. 플래시 파일의 properties에서 Class에 CallBack이라고 적는다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XdLyD0GgXX.bmp" style="width:260px;height:186px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;자, 이제 모든 준비는 끝났다. 이제 CallBack 함수를 이용하여 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;먼저, CallBack.as 파일을 작성해보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.DisplayObject;&lt;br /&gt;import flash.display.MovieClip;&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;&lt;br /&gt;import classes.display.Seed;&lt;br /&gt;&lt;br /&gt;public class CallBack extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function CallBack()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&amp;nbsp; // Sprite 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; configreListeners(); // stage 설정&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 화면 설정&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function configreListeners():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); // 화면 전체 영역 이벤트 등록&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 마우스 효과&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; seedTransparent : 내부 메서드&lt;br /&gt;&amp;nbsp; *&amp;nbsp; seed.onTransparent : 외부 Seed 클래스 내부의 _onTransprarent 속성에&lt;br /&gt;&amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; seedTransparent함수 전달.&lt;br /&gt;&amp;nbsp; *&amp;nbsp; scaleX, scaleY : 객체의 가로, 세로 크기 (백분율)&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function mouseMoveHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var seed:Seed = new Seed(); // 마우스효과 줄 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; seed.onTransparent = seedTransparent; // 함수명만 적어주면됨&lt;br /&gt;&lt;br /&gt;&amp;nbsp; seed.x = mouseX; // 객체의 X좌표 값을 현재 마우스의 X좌표로 위치 설정 &amp;nbsp;&lt;br /&gt;&amp;nbsp; seed.y = mouseY; // 객체의 y좌표 값을 현재 마우스의 y좌표로 위치 설정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; var ratio:Number = Math.random(); // 임의의 비율값&lt;br /&gt;&lt;br /&gt;&amp;nbsp; seed.scaleX = ratio; // 객체 가로크기 임의의 비율값 적용&lt;br /&gt;&amp;nbsp; seed.scaleY = ratio; // 객체 세로크기 임의의 비율값 적용&lt;br /&gt;&lt;br /&gt;&amp;nbsp; seed.alpha = Math.random(); // 임의의 알파값 적용&lt;br /&gt;&lt;br /&gt;&amp;nbsp; addChild(seed); // 객체 화면에 표시&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 객체 제거&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @param&amp;nbsp; diaplay&amp;nbsp; Seed 객체&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function seedTransparent(display:DisplayObject):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; removeChild(display); // 화면에서 제거 &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 이제 Seed.as 파일을 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package classes.display&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;import flash.geom.ColorTransform;&lt;br /&gt;&lt;br /&gt;public class Seed extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function Seed() &lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&amp;nbsp; // Sprite 객체 생성 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; vx = Math.random() * 10 - 5; // -5 ~ 5 사이값&lt;br /&gt;&amp;nbsp; vy = Math.random() * 10; //0 ~ 10 사이값 : 아래로 떨어질거라 무조건 상수값&lt;br /&gt;&lt;br /&gt;&amp;nbsp; gravity = 1; // 중력가속도 값 설정 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; addEventListener(Event.ENTER_FRAME, alphaEnterFrameHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 속도 : X&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var vx:Number;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 속도 : Y&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var vy:Number;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 중력가속도&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Number사용 : 소수점나옴 : 좀더 자연스러움을 주기위해&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var gravity:Number; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; callBack 함수 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var _onTransparent:Function;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; seeTransparent() 설정 &lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @param &amp;nbsp; value&amp;nbsp; CallBack 클래스의 seedTransparent() 메서드 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;public function set onTransparent(value:Function):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; _onTransparent = value; // seeTransparent()를 _onTransparent로 설정&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; seeTransparent() 조정&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;public function get onTransparent():Function&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; return _onTransparent; &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 객체 알파값 설정&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function alphaEnterFrameHandler(event:Event):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; vy = vy + gravity; // 중력가속도값(gravity)에 임의의 y속도를 더하여 중력가속도가 됨 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; this.x += vx; // X속도 값을 현재 객체의 x좌표값으로 설정&lt;br /&gt;&amp;nbsp; this.y += vy; // Y속도 값을 현재 객체의 Y좌표값으로 설정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; this.alpha -= 0.05; // 화면에서 점점사라지게 설정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; this.scaleX += 0.05; // 가로크기 증가&lt;br /&gt;&amp;nbsp; this.scaleY += 0.05; // 세로크기 증가&lt;br /&gt;&lt;br /&gt;&amp;nbsp; var ct:ColorTransform = this.transform.colorTransform; // 객체 색상 변경&lt;br /&gt;&lt;br /&gt;&amp;nbsp; ct.color = Math.random() * 0xFFFFFF; // 임의의 색상 설정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; this.transform.colorTransform = ct; // 설정 색상값 적용&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(this.alpha &amp;lt; 0) // 객체가 화면에 보이지 않으면&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;removeEventListener(Event.ENTER_FRAME, alphaEnterFrameHandler); //알파로 안보일뿐 사라지지(삭제)는 않음&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;if(_onTransparent != null) // _onTransparent속성에 함수가 설정되지 않으면&lt;br /&gt;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; _onTransparent(this); // CallBack 클래스의 seedTransparent()의 파리미터로 객체를 넘겨준다. &lt;br /&gt;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XcY3ojHeuY.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XcY3ojHeuY.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-5021916624107053679?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/5021916624107053679/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/parent-%EB%8C%80%EC%8B%A0-callback-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5021916624107053679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5021916624107053679'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/parent-%EB%8C%80%EC%8B%A0-callback-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0.html' title='parent 대신 callback 함수 사용하기'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-6719325635300576155</id><published>2010-04-02T04:32:00.000+09:00</published><updated>2011-01-29T19:56:36.338+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GlowFilter()'/><category scheme='http://www.blogger.com/atom/ns#' term='array'/><category scheme='http://www.blogger.com/atom/ns#' term='Stage'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='hitTestObject()'/><category scheme='http://www.blogger.com/atom/ns#' term='Duplicate'/><category scheme='http://www.blogger.com/atom/ns#' term='duplicateMovieClip'/><category scheme='http://www.blogger.com/atom/ns#' term='충돌감지'/><title type='text'>5. 다양한 객체 만들기 _ Duplicate (3) 충돌감지하여 객체 만들기</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;객체들간에 충돌을 감지하여 이미 만들어진 객체와 새로 만들어진 객체가 충돌하지 않고 새로운 객체를 계속 생성하는 것이다. 충돌감지에 대한 자세한 내용은 &lt;A href="http://butibutiuk.textcube.com/21" target=_blank&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;여기&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;를 참고하자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.display.MovieClip;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;import flash.filters.GlowFilter;&lt;br /&gt;&lt;br /&gt;public class Main extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function Main()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super(); // Sprite 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; stage.frameRate = 40; // 프레임 속도 40으로 설정&lt;br /&gt;&amp;nbsp; stage.addEventListener(Event.ENTER_FRAME, createParticleHandler); // 프레임마다 이벤트 등록&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 객체 참조 저장 배열 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var holder:Array = new Array(); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; box 객체 &amp;nbsp;&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var box:Sprite; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 객체 배치&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; scaleX : scaleY&amp;nbsp; 객체의 가로, 세로 크기 (백분율) 1.0 = 100%&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function createParticleHandler(event:Event):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; box = new Box(); // 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; box.x = Math.random() * stage.stageWidth;&amp;nbsp; // stage 범위 안에 표시할 수 있도록 x좌표 계산&lt;br /&gt;&amp;nbsp; box.y = Math.random() * stage.stageHeight; // stage 범위 안에 표시할 수 있도록 y좌표 계산&lt;br /&gt;&lt;br /&gt;&amp;nbsp; box.scaleX = box.scaleY = Math.random() * 1; // 객체를 임의의 크기로 계산&lt;br /&gt;&lt;br /&gt;&amp;nbsp; holder.push(box); // box 객체 배열에 추가 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(isOk(box)) // isOk() 함수 호출&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(box); // box 화면 표시&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;var glow:GlowFilter = new GlowFilter(); // GlowFilter 적용 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;glow.color = Math.random() * 0xFFFFFF; // 임의의 색상 적용&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;box.filters = [glow];&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;holder.pop(); // 배열에서 객체 삭제&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 충돌 감지&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @param &amp;nbsp; mc&amp;nbsp; box객체&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function isOk(mc:Sprite):Boolean&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; for(var i=0; i&amp;lt;holder.length-1; i++) // holder 배열 있는 수 만큼&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;var flag:Boolean = holder[i].hitTestObject(mc); // 배열에 저장된 객체와 현재 객체 충돌 비교&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;if(flag) // 충돌되면&lt;br /&gt;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; return false; // false 반환&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; break; &lt;br /&gt;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; return true; // 충돌되지 않으면 마지막에 true 반환&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XPCBaGErwa.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XPCBaGErwa.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 코드에서 나오는 여러가지 클래스의 속성, 메서드에 대해서 간단하게 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;Stage 클래스&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Stage는 Flash 화면에 보이는 전체 영역을 말한다. 그럼 Stage 클래스의 framRate의 속성에 대해알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XdDJTDhMQ8.jpg" style="width:327px;height:166px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;stage의 프레임 속도를 설정하나다. 프레임 속도는 fps(frame per second)로 정의된다.&lt;br /&gt;기본적으로 첫번째 SWF 파일의 프레임 속도가 기본 프레임 속도로 설정된다. 프레임 속도의 유효범위는 0.01 ~ 1000 이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;Array 클래스&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;배열에 접근하거나 조정할 수 있다. 인덴스는 0 부터이다. 첫번째 요소는 [0] 이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XSsRcag9WY.bmp" style="width:327px;height:212px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;push() &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;배열 끝에 하나 또는 그 이상의 요소를 추가하고 , 추가한 새로운 배열의 길이를 반환한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/Xe3N3AHtm6.jpg" style="width:404px;height:178px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;pop()&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;배열의 마지막 요소를 제거하고, 배열의 요소의 값을 반환한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XHfKyojmzW.jpg" style="width:408px;height:189px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;GlowFilter 클래스&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;객체에 광선 효과를 적용할 수 있는 클래스이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XNTN6knSuB.jpg" style="width:321px;height:175px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XNTN6knSuB.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;DisplayObject&amp;nbsp; 클래스&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DisplayObject 클래스의 hitTestObject() 메서드에 대해 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;객체와 객체간의 외각 영역이 겹치거나 교차하는지 확인한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XTeWH5Chhw.jpg" style="width:405px;height:319px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-6719325635300576155?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/6719325635300576155/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/5-%EB%8B%A4%EC%96%91%ED%95%9C-%EA%B0%9D%EC%B2%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0-duplicate-3-%EC%B6%A9%EB%8F%8C%EA%B0%90%EC%A7%80%ED%95%98%EC%97%AC-%EA%B0%9D%EC%B2%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6719325635300576155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6719325635300576155'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/5-%EB%8B%A4%EC%96%91%ED%95%9C-%EA%B0%9D%EC%B2%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0-duplicate-3-%EC%B6%A9%EB%8F%8C%EA%B0%90%EC%A7%80%ED%95%98%EC%97%AC-%EA%B0%9D%EC%B2%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0.html' title='5. 다양한 객체 만들기 _ Duplicate (3) 충돌감지하여 객체 만들기'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-6173995060555492180</id><published>2010-04-02T03:31:00.000+09:00</published><updated>2011-01-29T19:56:36.273+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='drawRect'/><title type='text'>Graphics 클래스</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;Graphics&amp;nbsp; 클래스&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;벡터 모양을 만들 때 사용할 수 있는 메서드가 포함되어 있으며 이것을 지원하는 객체 중에는 Sprite 객체와 Shape 객체가 있다. Graphics 클래스에는 graphics라는 속성이 있는데 이 속성을 이용하여 드로윙 할 수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XZW6lF0pwF.jpg" style="width:325px;height:214px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XZW6lF0pwF.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;하지만 Graphics 클래스는 new Graphics() 처럼 객체로 만들면 예외가 발생하므로 객체로 만들어 사용할 수 없으며, 이 클래스가 최종 클래스이므로 하위 클래스도 만들 수 없다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 어떻게 사용하느냐...위의 설명 두번째 줄에서 처럼 Sprite 클래스 또는 Shape 클래스를 이용하여 사용한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;var rect:Sprite = new Sprite(); &lt;br /&gt;&lt;br /&gt;var g:Graphics = rect.graphics;&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위와 같이 사용하여야 한다. 그럼 Graphics 클래스에서 주로 쓰이는 메서드에 대해 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Gulim, Sans-serif" color=#ff6600&gt;&lt;STRONG&gt;메서드&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#4dbf00&gt;&lt;FONT face="georgia,times new roman,times,serif"&gt;:: clear() :&lt;/FONT&gt; &lt;/FONT&gt;Graphics 객체에 그린 그래픽을 지우고 채우기 및 선 스타일을 다시 설정.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XSeFD7ln5E.jpg" style="width:376px;height:53px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;FONT color=#4dbf00&gt;&lt;FONT face="georgia,times new roman,times,serif"&gt;:: lineStyle() :&lt;/FONT&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Graphics 메서드를 호출할 때 사용되는 선 스타일을 지정. &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- &lt;FONT face="georgia,times new roman,times,serif"&gt;thickness&lt;/FONT&gt; — 선의 두께를 포인트 단위로 나타내는 정수이며 유효한 값은 0-255.&lt;/P&gt;&lt;P&gt;- &lt;FONT face="georgia,times new roman,times,serif"&gt;color&lt;/FONT&gt; — 선의 16진수 색상값.&lt;/P&gt;&lt;P&gt;- &lt;FONT face="georgia,times new roman,times,serif"&gt;alpha&lt;/FONT&gt; — 선 색상의 알파값.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XIUT9GEgja.jpg" style="width:364px;height:114px;" alt=""  /&gt;&lt;/div&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;FONT color=#4dbf00&gt;&lt;FONT face="georgia,times new roman,times,serif"&gt;:: beginFill() :&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Graphics 메서드를 호출할 때 사용되는 선 스타일을 지정. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- &lt;FONT face="georgia,times new roman,times,serif"&gt;color&lt;/FONT&gt; — 채우기 색상.&lt;/P&gt;&lt;P&gt;- &lt;FONT face="georgia,times new roman,times,serif"&gt;alpha&lt;/FONT&gt; — 채우기의 알파 값(0.0 ~ 1.0).&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XXEEXyBa0b.jpg" style="width:376px;height:68px;" alt=""  /&gt;&lt;/div&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;FONT color=#ff6600&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;FONT color=#4dbf00&gt;&lt;FONT face="georgia,times new roman,times,serif"&gt;:: drawRect() :&lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#000000&gt;사각형을 그림.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#000000&gt;- &lt;FONT face="georgia,times new roman,times,serif"&gt;x&lt;/FONT&gt; — 부모객체 기준으로 가로 위치 설정.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#000000&gt;- &lt;FONT face="georgia,times new roman,times,serif"&gt;y&lt;/FONT&gt; — 부모객체 기준으로 가로 위치 설정.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#000000&gt;- &lt;FONT face=Georgia&gt;width&lt;/FONT&gt; — 사각형 너비.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#000000&gt;- &lt;FONT face=Georgia&gt;height&lt;/FONT&gt; — 사각형 높이.&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XbSzPTy9b7.jpg" style="width:330px;height:51px;" alt=""  /&gt;&lt;/div&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#4dbf00&gt;&lt;FONT face=Georgia&gt;:: endFill() : &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;beginFill(), beginGradientFill()&lt;/FONT&gt; 또는 beginBitmapFill()메서드에 &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#000000&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;대한 마지막 호출 이후로 추가된 선과 곡선에 채우기를 적용. &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XEBtAshada.jpg" style="width:366px;height:66px;" alt=""  /&gt;&lt;/div&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 예제를 하나 만들어보자. 좌측 상단 (0, 0)에 빨간 사각형을 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;import flash.display.Graphics;&lt;br /&gt;&amp;nbsp;import flash.display.Sprite;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public class Main extends Sprite&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; public function Main()&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; super(); // Sprite 객체 생성 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; drawRect(); // 사각형 그리기 위한 메서드 호출&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; public function drawRect():void&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var thisGraphics:Graphics = this.graphics;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; thisGraphics.clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp; thisGraphics.beginFill(0xFF0000, 1);&lt;br /&gt;&amp;nbsp; &amp;nbsp; thisGraphics.drawRect(0, 0, 100, 100);&lt;br /&gt;&amp;nbsp; &amp;nbsp; thisGraphics.endFill();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="295" width="404" data="http://ss.textcube.com/blog/7/70627/attach/XR315xHbXa.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XR315xHbXa.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-6173995060555492180?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/6173995060555492180/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/graphics-%ED%81%B4%EB%9E%98%EC%8A%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6173995060555492180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6173995060555492180'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/graphics-%ED%81%B4%EB%9E%98%EC%8A%A4.html' title='Graphics 클래스'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-4043333254393535021</id><published>2010-04-01T04:59:00.000+09:00</published><updated>2011-01-29T19:56:36.214+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='Sprite'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='Duplicate'/><category scheme='http://www.blogger.com/atom/ns#' term='duplicateMovieClip'/><category scheme='http://www.blogger.com/atom/ns#' term='ColorTransform'/><title type='text'>5. 다양한 객체 만들기 _ Duplicate (2) 일정한 패턴으로 위치하기</title><content type='html'>&lt;P&gt;일정한 간격을 갖는 GRID(격자) 객체에 다양한 스타일을 적용한 예제를 한번 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이번 예제에서는 버튼을 무비클립을 만들어서 사용하는 것이 아니라 Graphics 클래스를 이용하여 직접 만들어보겠다. 그 전에 Graphics 클래스가 어떤 기능을 하는 클래스인지 알아봐야겠다. Graphics 클래스는 &lt;A href="http://butibutiuk.textcube.com/32" target=_blank&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;여기&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;를 참조하자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Graphics;&lt;br /&gt;import flash.display.MovieClip;&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.events.IEventDispatcher;&lt;br /&gt;import flash.geom.ColorTransform;&lt;br /&gt;&lt;br /&gt;public class Main extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function Main()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super(); // Sprite 클래스 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; stage.scaleMode = "noScale"; // 플레이어 크기와 상관없이 화면 내용 고정&lt;br /&gt;&amp;nbsp; stage.align = "TL"; // stage 정렬 : Top, Left&lt;br /&gt;&lt;br /&gt;&amp;nbsp; seedBox = new Sprite(); // 화면 Container 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; seedBox.x = 50;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; addChild(seedBox); // 화면에 표시&lt;br /&gt;&lt;br /&gt;&amp;nbsp; createButtons(); // 버튼 만들기&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 컨테이너 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var seedBox:Sprite;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 빨간 버튼 : Grid(격자) 패턴&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var normal_Red_btn:Sprite;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 초록 버튼 : 알파 적용&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var alpha_green_btn:Sprite;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 파란 버튼 : 색상 적용&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var color_blue_btn:Sprite;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 노란 버튼 : 스케일 적용&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var scale_yellow_btn:Sprite;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 버튼 사이 간격&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var gap:Number = 30;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 객체 행 수&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var row:int = 8;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 객체 열 수&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var column:int = 10;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; * &amp;nbsp; 객체 총 수 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var total:int = row * column;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 버튼 만들기&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function createButtons():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var g:Graphics; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(!normal_Red_btn) // 빨간 버튼 &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;normal_Red_btn = new Sprite(); // 빨간 버튼 객체 생성&lt;br /&gt;&amp;nbsp; &amp;nbsp;g = normal_Red_btn.graphics; // 빨간 버튼을 그릴 수 있도록 지정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.clear(); // 그린 그래픽 지움&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.lineStyle(1, 0x000000, 1); // 빨간 라인 그리기&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.beginFill(0xFF0000, 1); // 라인 안에 빨간색으로 채우기 시작&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.drawRect(0, 0, 20, 20); &lt;br /&gt;&amp;nbsp; &amp;nbsp;g.endFill(); // 빨간색 채움&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;normal_Red_btn.x = 10; // 빨간 버튼 x값 위치 설정&lt;br /&gt;&amp;nbsp; &amp;nbsp;normal_Red_btn.y = 10; // 빨간 버튼 y값 위치 설정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;normal_Red_btn.buttonMode = true; // 버튼 위 마우스 오버시 손모양으로 바뀜&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(normal_Red_btn); // 버튼 화면에 표시&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; configureListener(normal_Red_btn); // 빨간 버튼 설정&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(!alpha_green_btn) // 초록 버튼 &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;alpha_green_btn = new Sprite(); // 초록 버튼 객체 생성&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; g = alpha_green_btn.graphics; // 초록 버튼을 그릴 수 있도록 지정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.clear(); // 그린 그래픽 지움&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.lineStyle(1, 0x000000, 1); // 초록 라인 그리기&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.beginFill(0xCBFF00, 1); // 라인 안에 초록색으로 채우기 시작&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.drawRect(0, 0, 20, 20); &lt;br /&gt;&amp;nbsp; &amp;nbsp;g.endFill(); // 초록색 채움&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;alpha_green_btn.x = normal_Red_btn.x + gap ; // 빨간 버튼 옆에 위치&lt;br /&gt;&amp;nbsp; &amp;nbsp;alpha_green_btn.y = 10; // 초록 버튼 y값 위치 설정&lt;br /&gt;&amp;nbsp; &amp;nbsp;alpha_green_btn.buttonMode = true; // 버튼 위 마우스 오버시 손모양으로 바뀜&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(alpha_green_btn); // 버튼 화면에 표시&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;configureListener(alpha_green_btn); // 초록 버튼 설정&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(!color_blue_btn) // 파란 버튼 &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;color_blue_btn = new Sprite(); // 파란 버튼 객체 생성&lt;br /&gt;&amp;nbsp; &amp;nbsp;g = color_blue_btn.graphics; // 파란 버튼을 그릴 수 있도록 지정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.clear(); // 그린 그래픽 지움&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.lineStyle(1, 0x000000, 1); // 파란 라인 그리기&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.beginFill(0x0000FF, 1); // 라인 안에 파란색으로 채우기 시작&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.drawRect(0, 0, 20, 20);&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.endFill(); // 파란색 채움&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;color_blue_btn.x = 10; // 파란 버튼 x값 위치 설정&lt;br /&gt;&amp;nbsp; &amp;nbsp;color_blue_btn.y = normal_Red_btn.y + gap; // 빨간 버튼 아래 위치&lt;br /&gt;&amp;nbsp; &amp;nbsp;color_blue_btn.buttonMode = true; // 버튼 위 마우스 오버시 손모양으로 바뀜&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(color_blue_btn); // 버튼 화면에 표시&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; configureListener(color_blue_btn); // 파란 버튼 설정&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(!scale_yellow_btn) // 노란 버튼 &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;scale_yellow_btn = new Sprite(); // 노란 버튼 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;g = scale_yellow_btn.graphics; // 노란 버튼을 그릴 수 있도록 지정&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.clear(); // 그린 그래픽 지움&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.lineStyle(1, 0x000000, 1); // 노란 라인 그리기&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.beginFill(0xFFFF00, 1); // 라인 안에 노란색으로 채우기 시작&lt;br /&gt;&amp;nbsp; &amp;nbsp;g.drawRect(0, 0, 20, 20); &lt;br /&gt;&amp;nbsp; &amp;nbsp;g.endFill(); // 노란색 채움&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;scale_yellow_btn.x = color_blue_btn.x + gap; // 파란 버튼 옆에 위치&lt;br /&gt;&amp;nbsp; &amp;nbsp;scale_yellow_btn.y = alpha_green_btn.y + gap; // 초록 버튼 아래 위치&lt;br /&gt;&amp;nbsp; &amp;nbsp;scale_yellow_btn.buttonMode = true; // 버튼 위 마우스 오버시 손모양으로 바뀜&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(scale_yellow_btn); // 버튼 화면에 표시&lt;br /&gt;&amp;nbsp;&amp;nbsp; configureListener(scale_yellow_btn); // 노란 버튼 설정&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 버튼 설정&lt;br /&gt;&amp;nbsp; * &amp;nbsp;&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @param&amp;nbsp; dispatcher&amp;nbsp; 선택된 버튼 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function configureListener(dispatcher:IEventDispatcher):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; dispatcher.addEventListener(MouseEvent.CLICK, buttonClickHandler); // 버튼 이벤트 등록&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 화면 초기화&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Sprite.numChildren : 객체의 자식수를 반환,&amp;nbsp; index = 1&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Sprite.removeChildAt() : index 위치 자식 객체 제거, index = 0&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; private function removeAllChildren():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; while(seedBox.numChildren) // 컨테이너에 객체가 없어질때까지 반복 &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;seedBox.removeChildAt(0); // 지정된 index 위치에 있는 객체 제거&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 격자 패턴 &lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Math.floor : 내림 메서드 - 한 행이 채워지면 자동으로 줄바꿈&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function createNormal():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; removeAllChildren();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; for(var i:int=0; i&amp;lt;total; i++) // 0 ~ total 만큼 반복 &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;var temp:MovieClip = new Seed(); // 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.x = (i%column) * 40 + gap; // 가로 위치 x값 계산 : 간격 30 &lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.y = Math.floor(i/column) * 40 + gap; // 세로 위치 y값 계산 : 간격 30 &lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; seedBox.addChild(temp); // 화면에 표시&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 알파 적용 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function createAlpha():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; removeAllChildren();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; for(var i:int=0; i&amp;lt;total; i++) // 0 ~ total 만큼 반복 &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;var temp:MovieClip = new Seed(); // 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.x = (i%column) * 40 + gap; // 가로 위치 x값 계산 : 간격 30 &lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.y = Math.floor(i/column) * 40 + gap; // 세로 위치 y값 계산 : 간격 30 &lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; temp.alpha = i / total; //&amp;nbsp; 알파값 범위 : 0 ~ 1 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;seedBox.addChild(temp); // 화면에 표시&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 색상 적용 : 랜덤&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function createColor():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; removeAllChildren();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; for(var i:int=0; i&amp;lt;total; i++) // 0 ~ total 만큼 반복 &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;var temp:MovieClip = new Seed(); // 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.x = (i%column) * 40 + gap; // 가로 위치 x값 계산 : 간격 30 &lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.y = Math.floor(i/column) * 40 + gap; // 세로 위치 y값 계산 : 간격 30 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;var ct:ColorTransform = new ColorTransform(); // 색상 조절 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;ct.color = Math.random() * 0xFFFFFF; // 임의의 색상 선택&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.transform.colorTransform = ct; // 선택된 임의의 색상 적용&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;seedBox.addChild(temp); // 화면에 표시&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 스케일 적용 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function createScale():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; removeAllChildren();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; for(var i:int=0; i&amp;lt;total; i++) // 0 ~ total 만큼 반복 &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;var temp:MovieClip = new Seed(); // 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.x = (i%column) * 40 + gap; // 가로 위치 x값 계산 : 간격 30 &lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.y = Math.floor(i/column) * 40 + gap; // 세로 위치 y값 계산 : 간격 30 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.scaleX = temp.scaleY = i / total; // 객체의 가로, 세로 크기 계산&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;seedBox.addChild(temp); // 화면에 표시&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 버튼 선택 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function buttonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; switch(event.target) // 현재 선택한 버튼&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;case normal_Red_btn :&lt;br /&gt;&amp;nbsp; &amp;nbsp; createNormal(); // 격자패턴 메서드 호출&lt;br /&gt;&amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;case alpha_green_btn :&lt;br /&gt;&amp;nbsp; &amp;nbsp; createAlpha(); // 알파 적용 메서드 호출&lt;br /&gt;&amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;case color_blue_btn :&lt;br /&gt;&amp;nbsp; &amp;nbsp; createColor(); // 색상 적용 메서드 호출&lt;br /&gt;&amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;case scale_yellow_btn :&lt;br /&gt;&amp;nbsp; &amp;nbsp; createScale(); // 스케일 적용 메서드 호출&lt;br /&gt;&amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="float: left; margin-right: 10px; text-align: center;"&gt;&lt;object height="400" width="550" data="http://ss.textcube.com/blog/7/70627/attach/XEohIsFg2n.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XEohIsFg2n.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 코드에서 보면 graphics, buttonMode, clear, lineStyle, beginFill, drawRect, endFill, IEventDispatcher,ColorTransform 이런 것들이 나온다. 이것들이 도대체 뭘까? &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#4dbf00&gt;:: Sprite 클래스&lt;/FONT&gt;와 관련된 속성과 메서드 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- graphics, buttonMode 는 &lt;A href="http://butibutiuk.textcube.com/17" target=_blank&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;여기&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;를 참조하자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#4dbf00&gt;:: Graphics 클래스&lt;/FONT&gt;와 관련된 속성과 메서드 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- &amp;nbsp;lineStyle, beginFill, drawRect, endFill, 는 &lt;A href="http://butibutiuk.textcube.com/32" target=_blank&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;여기&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;를 참조하자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#4dbf00&gt;:: ColorTransform 클래스&lt;/FONT&gt;&lt;FONT color=#000000&gt;는 &lt;A href="http://butibutiuk.textcube.com/11" target=_blank&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;여기&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;를 참조하자.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;음...마지막으로 IEventDispatcher.. 이것은 다음번에 자세히 알아보도록 하자.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-4043333254393535021?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/4043333254393535021/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/5-%EB%8B%A4%EC%96%91%ED%95%9C-%EA%B0%9D%EC%B2%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0-duplicate-2-%EC%9D%BC%EC%A0%95%ED%95%9C-%ED%8C%A8%ED%84%B4%EC%9C%BC%EB%A1%9C-%EC%9C%84%EC%B9%98%ED%95%98%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4043333254393535021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4043333254393535021'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/5-%EB%8B%A4%EC%96%91%ED%95%9C-%EA%B0%9D%EC%B2%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0-duplicate-2-%EC%9D%BC%EC%A0%95%ED%95%9C-%ED%8C%A8%ED%84%B4%EC%9C%BC%EB%A1%9C-%EC%9C%84%EC%B9%98%ED%95%98%EA%B8%B0.html' title='5. 다양한 객체 만들기 _ Duplicate (2) 일정한 패턴으로 위치하기'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-269088769135671429</id><published>2010-04-01T03:05:00.000+09:00</published><updated>2011-01-29T19:56:36.158+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='addChildAt()'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='numChildren'/><category scheme='http://www.blogger.com/atom/ns#' term='removeChildAt()'/><title type='text'>numChildren &amp; removeChildAt()</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;numChildren&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;객체의 자식 수를 반환한다. &lt;A href="http://butibutiuk.textcube.com/28" target=_blank&gt;&lt;FONT color=#4dbf00&gt;예제&lt;/FONT&gt;&lt;/A&gt;에서는 seedBox 객체에 생성된 100개의 seed 객체가 &lt;/P&gt;&lt;P&gt;자식이 된다. seedBox아래에 100개의 seed 객체가 있는것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XA4vF8jWWA.jpg" style="width:388px;height:115px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XA4vF8jWWA.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;removeChildAt()&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DisplayObjectContainer 자식 목록에서 지정된 &lt;FONT face="Courier New"&gt;index &lt;/FONT&gt;위치에 있는 자식 DisplayObject를 &lt;/P&gt;&lt;P&gt;제거한다. 최하위 인덱스 위치(0)의 자식을 제거할 때 목록에 있는 나머지 모든 자식 객체가 한 자리씩 아래로 이동한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XaDYGi0iJp.jpg" style="width:459px;height:128px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XaDYGi0iJp.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;음...무슨말이지 잘 모르겠다. 그렇다면...그림을 그려보며 이해해보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XFztCP1Rq2.jpg" style="width:415px;height:380px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XFztCP1Rq2.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;위에서 보면 Container의 객체에는 6개의 자식 객체가 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Container.numChilren은 제일 첫번째 자식 객체를 가킨다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;numChilren(1) = childAt(0) 이다. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;코드로 살펴보자 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;private function removeAllChildren():void&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while(seedBox.numChildren) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; seedBox.removeChildAt(0); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;코드에서 seedBox 는 그림의 Container에 해당한다. 그럼 코드를 분석해보자.&lt;/P&gt;&lt;P&gt;seedBox 에 있는 객체를 몽땅 지우라는 것이다. 음...좀더 자세히 분석해보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;seedBox 에는 많은 자식 객체가 있을 것이다. &lt;/P&gt;&lt;P&gt;그 자식 객체가 있을 동안, 괄호안의 내용을 실해하라는 뜻이다. 반복문안의 실행문을 보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;seedBox 안에 있는 자식객체의 제일 첫번째 객체를 remove(제거)하라는 것이다. &lt;/P&gt;&lt;P&gt;그럼, 첫번째 객체를 제거했으니 두번째에 있는 객체가 다시 첫번째 객체로 될것 이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 또 제거한다. 그럼 그 다음 두번째 객체가 다시 첫번째 객체가 되는 것이다. &lt;/P&gt;&lt;P&gt;그럼 다시 또 첫번째 객체를 제거한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이것이 반복되어 결국 seedBox 의 자식객체는 전부 삭제될 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#4dbf00&gt;# removeChildAt(index : int)&lt;/FONT&gt; : 자식 객체 삭제&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;매개변수- index : 제거할 자식 객체의 인덱스&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#4dbf00&gt;# addChildAt( child : DisplayObject, index : int )&lt;/FONT&gt; : 자식 객체 추가&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;매개변수 - child : DisplayObject&amp;nbsp; - 자식으로 추가할 객체&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; - index : int - 추가할 인덱스 위치&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-269088769135671429?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/269088769135671429/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/numchildren-removechildat.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/269088769135671429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/269088769135671429'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/04/numchildren-removechildat.html' title='numChildren &amp;amp; removeChildAt()'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-6530343353452807507</id><published>2010-03-31T21:03:00.000+09:00</published><updated>2011-01-29T19:56:35.995+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BitmapData'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='IBitmaDrawable'/><category scheme='http://www.blogger.com/atom/ns#' term='draw'/><title type='text'>BitmapData</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color="#ff6600"&gt;BitmapData&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;BitmapData 클래스를 사용하면 &lt;SPAN&gt;Bitmap 객체&lt;/SPAN&gt;의 데이터(픽셀)를 처리할 수 있다. &lt;/P&gt;&lt;P&gt;BitmapData는 1pixel당 8bit 자리 BitmapData를 가지고 있다.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XIRVFblfpW.jpg" style="width:325px;height:190px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;BitmapData 생성시 반듯이 width,heighth 값을 가져야 한다. &lt;/P&gt;&lt;P&gt;BitmapData의 fillColor는 배경색으로 기본적으로 ARGB이다.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XLWe9sXG1b.bmp" style="width:427px;height:130px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;FONT color="#ff6600"&gt;&lt;STRONG&gt;:: 모든 UI 객체는 DisplayObject를 가지고 있다.&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XEcobSmBxT.jpg" style="width:498px;height:338px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;[그림 1]에서 처럼 하나의 이미지 파일에는 위와 같은 정보를 담고 있다. 사진과 같은 UI객체인 이미지 파일은 DisplayObject 이다. DisplayObject 는 눈에 보이는 모든 객체를 말한다. &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;만약 이미지에 대한  픽셀값을 가지고 싶다면 BitmapData의 draw()를 사용하면 된다.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XchPX6nafb.jpg" style="width:434px;height:198px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;draw() 를 이용하며 DisplayObject가 BitmapData로 떨어진다. &lt;/P&gt;&lt;P&gt;여기서 중요한 건 draw()의 매개변수인 IBitmapDrawable을 반드시 가지고 있어야 한다.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XKz2TiVbOL.bmp" style="width:372px;height:182px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;:: &lt;FONT color="#ff6600"&gt;DisplayObject(눈에 보이는 모든 객체)&lt;/FONT&gt;는 반드시 &lt;FONT color="#ff6600"&gt;IBitmaDrawable&lt;/FONT&gt;을 가지고 있어야한다.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;사진이나 이미지는 눈에 보이는 객체이므로 DisplayObject를 상속받는다.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;이 객체를 draw() 하는 순간 BitmapData는 [그림 1]과 같은 정보를 갖게 된다.  &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-6530343353452807507?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/6530343353452807507/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/bitmapdata.html#comment-form' title='4개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6530343353452807507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6530343353452807507'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/bitmapdata.html' title='BitmapData'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-3050896918680205220</id><published>2010-03-31T14:54:00.000+09:00</published><updated>2011-01-29T19:56:35.908+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='Duplicate'/><category scheme='http://www.blogger.com/atom/ns#' term='duplicateMovieClip'/><title type='text'>5. 다양한 객체 만들기 _ Duplicate (1) 랜덤하게 위치하기</title><content type='html'>&lt;P&gt;한 개의 클래스를 이용하여 다양한 객체를 만들어 생성하고 제거할 수 있다. 어떻게 하나의 클래스를 가지고 다양한 객체를 만드냐 하면 바로 복제하기를 이용하면 된다. &lt;/P&gt;&lt;P&gt;역시 예제를 통해 이해하는 것이 빠를것 같다. 그럼 예제를 하나 만들어보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;플래시 파일을 하나 열어 하나의 무비클립을 만들고 Linkage 설정에서 class명을 Seed라고 만들자. 반복문을 통해 Seed 클래스 100개를 만들어 크기 및 알파, 필터 값을 적용하는 예제를 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.filters.GlowFilter;&lt;br /&gt;&lt;br /&gt;public class DuplicateExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function DuplicateExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super(); // Sprite 객체 생성&lt;br /&gt;&amp;nbsp; configureListener(); // 화면 및 버튼 설정&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; * &amp;nbsp;&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var seedBox:Sprite;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 화면 구성 설정&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;public function configureListener():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; seedBox = new Sprite(); // 화면에 붙일 패널 객체 생성&lt;br /&gt;&amp;nbsp; addChild(seedBox); // 패널 화면에 표시&lt;br /&gt;&lt;br /&gt;&amp;nbsp; redbtn_mc.addEventListener(MouseEvent.CLICK, redbtnClickHandler); &lt;br /&gt;&amp;nbsp; greenbtn_mc.addEventListener(MouseEvent.CLICK, greenbtnClickHandler);&lt;br /&gt;&amp;nbsp; bluebtn_mc.addEventListener(MouseEvent.CLICK, bluebtnClickHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 화면 초기화&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Sprite.numChildren : 객체의 자식수를 반환 &amp;nbsp;&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Sprite.removeChildAt() : index 위치 자식 객체 제거, 최하위 index = 0&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; private function removeAllChildren():void&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while(seedBox.numChildren) // 패널에 객체가 없어질때까지 반복 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; seedBox.removeChildAt(0); // 지정된 index 위치에 있는 객체 제거&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 기본 객체 &lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Math.random() : 0 ~ 1 사이의 난수&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;public function redbtnClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; removeAllChildren(); // 화면 Clear&lt;br /&gt;&lt;br /&gt;&amp;nbsp; for(var i:int=0; i&amp;lt;100; i++) // 100개 생성&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;var temp:MovieClip = new Seed(); // 표시할 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.x = Math.random() * stage.stageWidth; // stage 범위 안에 표시할 수 있도록 x좌표 계산&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.y = Math.random() * stage.stageHeight; // stage 범위 안에 표시할 수 있도록 x좌표 계산/ &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;seedBox.addChild(temp); // 생성한 패널에 객체 표시&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 객체 크기 및 알파 조절&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Math.random() : 0 ~ 1 사이의 난수 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;public function greenbtnClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; removeAllChildren(); // 화면 Clear&lt;br /&gt;&lt;br /&gt;&amp;nbsp; for(var i:int=0; i&amp;lt;100; i++) // 100개 생성&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;var temp:MovieClip = new Seed(); // 표시할 객체 생성&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.x = Math.random() * stage.stageWidth; // stage 범위 안에 표시할 수 있도록 x좌표 계산&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.y = Math.random() * stage.stageHeight; // stage 범위 안에 표시할 수 있도록 y좌표 계산&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.scaleX = temp.scaleY = Math.random() * 2; // 객체의 가로, 세로 크기 계산&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.alpha = Math.random(); // 임의의 값 적용&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;seedBox.addChild(temp); // 생성한 패널에 객체 표시&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 객체 Glow 필터 적용&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Math.random() : 0 ~ 1 사이의 난수&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;public function bluebtnClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; removeAllChildren(); // 화면 Clear&lt;br /&gt;&lt;br /&gt;&amp;nbsp; for(var i:int=0; i&amp;lt;100; i++) // 100개 생성&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;var temp:MovieClip = new Seed(); // 표시할 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.x = Math.random() * stage.stageWidth; // stage 범위 안에 표시할 수 있도록 x좌표 계산&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.y = Math.random() * stage.stageHeight; // stage 범위 안에 표시할 수 있도록 y좌표 계산&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.scaleX = temp.scaleY = Math.random() * 2; // 객체의 가로, 세로 크기 계산&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.alpha = Math.random(); // 임의의 값 적용&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;temp.filters = [ new GlowFilter() ]; // Glow 필터 적용 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;seedBox.addChild(temp); // 생성한 패널에 객체 표시&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XE4nw22OaD.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XE4nw22OaD.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;44~46 번째 라인에서 numChildren과 removeChildAt() 이라는 메서드가 나왔다.&lt;/P&gt;&lt;P&gt;그럼 다음번에 numChildren과 removeChildAt()에 대해 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-3050896918680205220?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/3050896918680205220/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/5-%EB%8B%A4%EC%96%91%ED%95%9C-%EA%B0%9D%EC%B2%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0-duplicate-1-%EB%9E%9C%EB%8D%A4%ED%95%98%EA%B2%8C-%EC%9C%84%EC%B9%98%ED%95%98%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/3050896918680205220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/3050896918680205220'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/5-%EB%8B%A4%EC%96%91%ED%95%9C-%EA%B0%9D%EC%B2%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0-duplicate-1-%EB%9E%9C%EB%8D%A4%ED%95%98%EA%B2%8C-%EC%9C%84%EC%B9%98%ED%95%98%EA%B8%B0.html' title='5. 다양한 객체 만들기 _ Duplicate (1) 랜덤하게 위치하기'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-3122357365578573612</id><published>2010-03-31T03:55:00.000+09:00</published><updated>2011-01-29T19:56:35.846+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video media'/><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='FLV'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='NetConnention'/><category scheme='http://www.blogger.com/atom/ns#' term='NetStream'/><category scheme='http://www.blogger.com/atom/ns#' term='동영상 플레이어'/><category scheme='http://www.blogger.com/atom/ns#' term='FLV Player'/><title type='text'>#FLV 플레이어 완성</title><content type='html'>&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import fl.events.SliderEvent;&lt;br /&gt;&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.*;&lt;br /&gt;import flash.media.Video;&lt;br /&gt;import flash.media.SoundTransform;&lt;br /&gt;import flash.net.NetConnection;&lt;br /&gt;import flash.net.NetStream;&lt;br /&gt;&lt;br /&gt;public class Main extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function Main()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super(); // Sprite 클래스 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; configurePlayer(); // player 설정&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private var firstFlag:Boolean = true;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private var isPlaying:Boolean = false;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private var isConnection:Boolean = false;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private var isPause:Boolean = false;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 파일&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var videoURL:String = "once.flv";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 연결&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var connection:NetConnection;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 스트림&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var stream:NetStream;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 플레이어 설정&lt;br /&gt;&amp;nbsp; * &amp;nbsp;&lt;br /&gt;&amp;nbsp; *&amp;nbsp; connect() : 로컬 컴퓨터에서 비디오 파일과 연결 중이라면 null로 설정&lt;br /&gt;&amp;nbsp; *&amp;nbsp; snapInterval : 볼륨 조절시 값이 증가하거나 감소하는 기준 간격&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function configurePlayer():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; connection = new NetConnection(); // 비디오 연결 객체 생성&lt;br /&gt;&amp;nbsp; connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); // 비디오 연결상태 이벤트 등록&lt;br /&gt;&amp;nbsp; connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); // 보안오류 이벤트 등록&lt;br /&gt;&amp;nbsp; connection.connect(null);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; play_mc.addEventListener(MouseEvent.CLICK, playClickHandler); // 재생버튼 이벤트 등록&lt;br /&gt;&amp;nbsp; pause_mc.addEventListener(MouseEvent.CLICK, pauseClickHandler); // 일시정지 버튼 이벤트 등록&lt;br /&gt;&amp;nbsp; stop_mc.addEventListener(MouseEvent.CLICK, stopClickHandler); // 정지버튼 이벤트 등록&lt;br /&gt;&amp;nbsp; slider_comp.addEventListener(SliderEvent.THUMB_DRAG, volumeSliderHandler); // 볼륨조절 이벤트 등록&lt;br /&gt;&lt;br /&gt;&amp;nbsp; slider_comp.maximum = 1; // 볼륨 최대값 설정&lt;br /&gt;&amp;nbsp; slider_comp.minimum = 0; // 볼륨 최소값 설정&lt;br /&gt;&amp;nbsp; slider_comp.snapInterval = 0.1; // 0.1만큼 증가 감소&lt;br /&gt;&amp;nbsp; slider_comp.value = 0.5; // 초기 볼륨값 설정&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 스트림&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; attachNetStream : 비디오 스트리밍&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function setStream():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; stream = new NetStream(connection); // Connection을 통해 객체 생성&lt;br /&gt;&amp;nbsp; stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); // 연결된 데이터 가져오는 상태 이벤트 등록&lt;br /&gt;&amp;nbsp; stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); // 비동기적 예외발생 이벤트 등록&lt;br /&gt;&lt;br /&gt;&amp;nbsp; var video:Video = new Video();&amp;nbsp; // 비디오 객체 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; video.x = 30; // 비디오 x좌표&lt;br /&gt;&amp;nbsp; video.y = 10; // 비디오 y좌표&lt;br /&gt;&lt;br /&gt;&amp;nbsp; video.width = 500; // 비디오 너비&lt;br /&gt;&amp;nbsp; video.height = 330; // 비디오 높이&lt;br /&gt;&lt;br /&gt;&amp;nbsp; video.attachNetStream(stream); // 읽어온 데이터를 화면에 연결&lt;br /&gt;&amp;nbsp; addChild(video); // 화면에 표시&lt;br /&gt;&lt;br /&gt;&amp;nbsp; isConnection = true; // 비디오 연결됨&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 연결 상태&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function netStatusHandler(event:NetStatusEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; switch(event.info.code)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;case "NetConnection.Connect.Success" :&lt;br /&gt;&amp;nbsp; &amp;nbsp; setStream(); // 비디오 연결 성공시 호출&lt;br /&gt;&amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;case "NetStream.Play.StreamNotFound";&lt;br /&gt;&amp;nbsp; &amp;nbsp; trace("Unable to locate video: " + videoURL);&lt;br /&gt;&amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 보안 오류&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function securityErrorHandler(event:SecurityErrorEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; trace("sequrityError");&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 비동기적 예외 발생&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function asyncErrorHandler(event:AsyncErrorEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; trace("async error");&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 재생&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function playClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(isConnection &amp;amp;&amp;amp; firstFlag) &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;firstFlag = false; &lt;br /&gt;&amp;nbsp; &amp;nbsp;stream.play(videoURL); // 비디오 파일 재생&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;var st:SoundTransform = stream.soundTransform; // 재생되는 비디오 사운드 정보 넘겨줌&lt;br /&gt;&amp;nbsp; &amp;nbsp;st.volume = slider_comp.value; // 뵬륨 조절&lt;br /&gt;&amp;nbsp; &amp;nbsp;stream.soundTransform = st; // 변환된 볼륨 재적용&lt;br /&gt;&amp;nbsp; &amp;nbsp;isPlaying = true; // 재생상태&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(isPause &amp;amp;&amp;amp; !isPlaying) // 정지 중&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;stream.resume(); // 정지했던 비디오 스트림 다시 재생&lt;br /&gt;&amp;nbsp; &amp;nbsp;isPause = false; // 일시정지상태&lt;br /&gt;&amp;nbsp; &amp;nbsp;isPlaying = true; // 재생상태&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 일시정지&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function pauseClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(isPlaying &amp;amp;&amp;amp; !isPause) // 재생 중&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;stream.pause(); // 비디오 정지&lt;br /&gt;&amp;nbsp; &amp;nbsp;isPlaying = false; // 재생상태&lt;br /&gt;&amp;nbsp; &amp;nbsp;isPause = true; // 일시정지상태&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 정지&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function stopClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; stream.pause(); // 비디오 정지&lt;br /&gt;&amp;nbsp; stream.seek(0); // 처음 재생 상태로 돌아감&lt;br /&gt;&amp;nbsp; isPlaying = false; // 재생 상태&lt;br /&gt;&amp;nbsp; isPause = true; // 정지상태&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 비디오 볼륨 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function volumeSliderHandler(event:SliderEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var st:SoundTransform = stream.soundTransform; // 재생되는 비디오 사운드 정보 넘겨줌&lt;br /&gt;&amp;nbsp; st.volume = event.value; // 볼륨 조절&lt;br /&gt;&amp;nbsp; stream.soundTransform = st; // 변환된 사운드 재적용&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XVjrM5xldW.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XVjrM5xldW.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-3122357365578573612?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/3122357365578573612/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/flv-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B4-%EC%99%84%EC%84%B1.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/3122357365578573612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/3122357365578573612'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/flv-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B4-%EC%99%84%EC%84%B1.html' title='#FLV 플레이어 완성'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-5253238290081058145</id><published>2010-03-30T17:26:00.000+09:00</published><updated>2011-01-29T19:56:35.732+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video media'/><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='동영상'/><category scheme='http://www.blogger.com/atom/ns#' term='NetConnection'/><category scheme='http://www.blogger.com/atom/ns#' term='NetStream'/><category scheme='http://www.blogger.com/atom/ns#' term='NetSteam 클래스'/><category scheme='http://www.blogger.com/atom/ns#' term='동영상 플레이어'/><category scheme='http://www.blogger.com/atom/ns#' term='FLV Player'/><title type='text'>#FLV 플레이어 _ (1) Video, NetConnection, NetStream</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;FLV 플레이어를 만들어보기 전에 용어 몇가지를 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;#FLV(Flash Video) &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Flash Player를 재생할 수 있는 동영상 파일 포맷이며 확장자는 .flv이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;동영상 인코딩이란 아날로그 영상을 디지털 영상으로 변환해주는 일련의 과정을 말한다.&lt;/P&gt;&lt;P&gt;즉, 각종 장비들의 데이터를 PC에서 재생할 수 있는 동영상 파일로 변환해 주는 과정이란 뜻한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;#인코딩&lt;/FONT&gt; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;아날로그 형식을 디지털 형식으로 변환.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;일반 동영상 포맷(AVI, MPEG, MOV)은 swf 실행 중에 실시간으로 로드하여 재생할 수 없다. 그렇기 때문에 swf 런타임에서 실시간 로드가 가능한 포맷인 flv로 변환해야하며, 그 변환과정을 인코딩이라 한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;#스트리밍&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;파일을 다운로드 하면서 재생하는 방식. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#4dbf00&gt;&lt;FONT color=#ff6600&gt;#flv 활용 방법&lt;/FONT&gt;&lt;STRONG&gt; &lt;/STRONG&gt;&lt;/FONT&gt;( [windows] → [Components] : ctrl + F7)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. FLVPlayback 컴포넌트 :&amp;nbsp; 플레이어 구성 요소들이 다 갖추어져있는 구조.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2. Video UI 컴포넌트 : 플레이어 구성 요소들이 분리되어 있어 원하는 위치로 이동시켜 사용.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;비디오를 변형하여 자신이 만들고 싶은 구조의 플레이어를 제작하려면 Video 클래스를 사용하는 것이 좋다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;먼저 FLV Player의 흐름이 어떻게 되는지 살펴보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock left" style="float: left; margin-right: 10px;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XOboOwDw5L.jpg" style="width:524px;height:377px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XOboOwDw5L.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. FLV 파일과 Flash Player와 연결&lt;br /&gt;2. 연결 하려면 NetConnection 클래스 필요&lt;br /&gt;3. 연결 되었으면 NetStream 클래스로 데이터를 받아온다.&lt;br /&gt;4. NetStream으로 받아온 데이터를 Video 클래스에서 재생한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;FLV Player의 흐름은 위와 같다. 그럼 우리가 알아야 할 것은 Video , NetConnection, NetStream 이다. 이것들이 무엇인지 한번 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;Video 클래스&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;실시간 또는 기록된 비디오를 표시한다. 즉, 서버 또는 로컬에 저장된 flv파일이나 사용자의 컴퓨터에서 캡쳐한 실시한 비디오를 재생하는 비디오 객체를 생성한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;쉽게 말하자면 그냥 화면에 표시해주는 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Video 클래스는 단지 화면에 표시하기만 할 뿐이고 실제 비디오 스트림을 재생하려면 attachNetStream()을 사용하여 Video객체에 첨부한 다음 addChlid()를 사용하여 Video 객체를 추가한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XIrG6XGoKD.bmp" style="width:423px;height:227px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;음.. Video 클래스 만으로는 동영상을 재생 시킬 수 없다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;NetConnection 클래스&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;클라이언트와 서버를 연결하는 파이프와 같다. &amp;nbsp;만약 Flash Media Server가 없으면 NetConnection 클래스를 사용해서 로컬 파일 시스템 또는 웹 서버에서 비디오 파일이나 MP3 파일을 재생할 수 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XdZfOlVGC1.bmp" style="width:375px;height:215px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XdZfOlVGC1.bmp')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;즉, 파일을 연결짓는 연결고리 역할을 하는 셈이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;NetStream 클래스&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;스트리밍에 관련된 것을 관리하는 클래스로 NetConnection 객체 안에 있는 채널이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XVDYAWBNbK.bmp" style="width:344px;height:220px;" alt=""  /&gt;&lt;/div&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;즉, 정지/재생/탐색 등 스트리밍에 관련된 것을 관리하는 클래스이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-5253238290081058145?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/5253238290081058145/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/flv-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B4-1-video-netconnection.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5253238290081058145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5253238290081058145'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/flv-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B4-1-video-netconnection.html' title='#FLV 플레이어 _ (1) Video, NetConnection, NetStream'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-3276998404358521970</id><published>2010-03-30T15:26:00.000+09:00</published><updated>2011-01-29T19:56:35.677+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ByteArray'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='spectrum'/><category scheme='http://www.blogger.com/atom/ns#' term='스펙트럼'/><category scheme='http://www.blogger.com/atom/ns#' term='단위시간'/><title type='text'>#사운드를 이용한 mp3 플레이어 완성</title><content type='html'>&lt;P&gt;지금까지 Sound, SoundChannel, SoundTransform을 이용하여 만들어 보았다. 그렇다면 좀더 시각적인 효과를 넣어 만들어 보자. 지금까지 만들어진 파일에 몇가지를 추가해보자. &lt;/P&gt;&lt;P&gt;사운드 스펙트럼을 추가하여 재생되고 있는 사운드 데이터 파형을 시각적으로 보여주고, 사운드의 진행상태를 파악하기 위해 progress bar를 추가하여 보겠다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import fl.events.SliderEvent;&lt;br /&gt;import fl.controls.Slider;&lt;br /&gt;&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.media.Sound;&lt;br /&gt;import flash.media.SoundChannel;&lt;br /&gt;import flash.media.SoundTransform;&lt;br /&gt;import flash.net.URLRequest;&lt;br /&gt;&lt;br /&gt;public class MyMusic extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function MyMusic()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super(); // Sprite 클래스(상속하는 상위클래스)&amp;nbsp; 생성.&lt;br /&gt;&amp;nbsp; configureSound(); // 사운드 설정&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; * &amp;nbsp; 사운드 객체 : 객체 생성시 자동으로 사운드 파일 로드.&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var music:Sound = new PowerUp(); //new Sound(new URLRequest("힘을내줘.mp3")); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 채널&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var channel:SoundChannel;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 현재 재생 위치(ms)&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var position:Number = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 변환 : 볼륨 및 패닝 속성 포함.&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var vol_tran:SoundTransform;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 스펙트럼.&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var spectrum:Sprite;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 스펙트럼 그리기.&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var gt:Graphics;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 ByteArray&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var ba:ByteArray;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 초기화 &lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Slider(클래스) snapInterval(속성) : 패닝 slider 이동시 값이 증가하거나 감소하는 기준 간격 설정.&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function configureSound():void&lt;br /&gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp; pan_slider.maximum = 1; // 패닝 Slider 최대값 설정.&lt;br /&gt;&amp;nbsp; pan_slider.minimum = -1; // 패닝 Slider 최소값 설정.&lt;br /&gt;&amp;nbsp; pan_slider.value = 0; &amp;nbsp;&amp;nbsp; // 기본값 0으로 설정.&lt;br /&gt;&amp;nbsp; pan_slider.snapInterval = 0.1; // 0.1만큼 증가 감소.&lt;br /&gt;&amp;nbsp; pause_btn.mouseEnabled = false; // 일시정지버튼 비활성화.&lt;br /&gt;&amp;nbsp; play_btn.mouseEnabled = true; &amp;nbsp; // 재생 버튼 활성화.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; pause_btn.addEventListener(MouseEvent.CLICK, pauseButtonClickHandler); //일시정지버튼 이벤트 등록.&lt;br /&gt;&amp;nbsp; play_btn.addEventListener(MouseEvent.CLICK, playButtonClickHandler); // 재생버튼 이벤트 등록.&lt;br /&gt;&amp;nbsp; sound_vol.addEventListener(SliderEvent.THUMB_DRAG, volumeSliderHandler); // 볼륨조절 이벤트 등록&lt;br /&gt;&amp;nbsp; pan_slider.addEventListener(SliderEvent.THUMB_DRAG, panSliderHandler); // 패닝조절 이벤트 등록&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 재생시간 출력&amp;nbsp; :&amp;nbsp; 단위시간을 00:00 형식으로 출력&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 분 : Math.floor(sec/60) &lt;br /&gt;&amp;nbsp; *&amp;nbsp; 초 : Math.floor(sec%60) &lt;br /&gt;&amp;nbsp; *&amp;nbsp; Math 클래스의 유용한 메서드 : Math.ceil() - 올림, Math.round() - 반올림, Math.floor() - 내림 &amp;nbsp;&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function ConverTime(milli:Number):String&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var n:Number = milli / 1000;&amp;nbsp; // 입력값이 ms(밀리초)이므로 1000으로 나눠 초단위로 바꿈&lt;br /&gt;&amp;nbsp; var min:int = Math.floor(n/60); // 분 계산&lt;br /&gt;&amp;nbsp; var second:int = Math.floor(n%60); // 초 계산&lt;br /&gt;&amp;nbsp; var min_str:String; // 분 단위 형식 저장&lt;br /&gt;&amp;nbsp; var second_str:String; // 초 단위 형식 저장&lt;br /&gt;&amp;nbsp; if(min&amp;lt;10) // 계산된 분이 10보다 작으면&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;min_str = "0" + min; // "0" 와 계산된 분을 더해 분의 두자리 형식 만듬&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else // 계산된 분이 10보다 크면 &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;min_str = String(min); // 계산된 분을 String으로 캐스팅&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; if(second&amp;lt;10) // 계산된 초가 10보다 작으면&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;second_str = "0" +second; // "0" 와 계산된 초를 더해 초의 두자리 형식 만듬&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else // 계산된 초가 10보다 크면&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;second_str = String(second); // 계산된 초를 String으로 캐스팅&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; return min_str + ":" + second_str; // 계산된 분과 초를 "00:00" 형식으로 만들어 반환&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 진행상태( progress_mc 와 스펙트럼)&lt;br /&gt;&amp;nbsp; * &lt;br /&gt;&amp;nbsp; *&amp;nbsp; percent(백분율)&amp;nbsp; :&amp;nbsp; 현재 재생 위치 / 사운드 시간 &lt;br /&gt;&amp;nbsp; *&amp;nbsp; ByteArray :&amp;nbsp; 만들어진 ByteArray 객체의 크기는 512개의 부동 소수점 값으로 고정.&lt;br /&gt;&amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 처음 256개의 값은 왼쪽 채널을, 다음 256개의 값은 오른쪽 채널.&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 진폭 범위 : -1 ~ 1 (부동 소수점 값)&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function barEnterFrameHandler(event:Event):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var percent:Number = (channel.position / music.length) * 100;&lt;br /&gt;&amp;nbsp; progress_mc.bar_mc.scaleX = percent; // percent값을 bar_mc에 적용&lt;br /&gt;&amp;nbsp; position_txt.text = (ConverTime(channel.position)); // 현재 재생 시간 &lt;br /&gt;&amp;nbsp; length_txt.text = (ConverTime(music.length)); //전체 재생 시간 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(!spectrum) &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;spectrum = new Sprite(); // 사운드 스펙트럼을 그려 넣을 Sprite 객체 생성&lt;br /&gt;&amp;nbsp; &amp;nbsp;gt = spectrum.graphics; // 스펙트럼 그리기위해 Graphics 클래스 생성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;spectrum.y = 150; //&amp;nbsp; 사운드 스펙트럼 위치 설정&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(spectrum); // 사운드 스펙트럼 화면에 표시(Sprite 객체 DisplayObject에 추가)&lt;br /&gt;&amp;nbsp; &amp;nbsp;ba = new ByteArray(); // 512byte의 사운드 정보를 담음&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; gt.clear(); // 스팩트럼 그리기 전에 지움&lt;br /&gt;&amp;nbsp; gt.lineStyle(1, 0x0000FF, 1); // 선 스타일 지정 : 선의 두께, 색상값, 알파값&lt;br /&gt;&amp;nbsp; gt.beginFill(0x0000FF, 1); // 색 채우기 : 채울 색상값, 알파값&lt;br /&gt;&amp;nbsp; gt.moveTo(0, 0); // 현재 위치 이동 : pixel단위&lt;br /&gt;&lt;br /&gt;&amp;nbsp; SoundMixer.computeSpectrum(ba, false); // 사운드 정보 저장, 사운드 파형은 진폭.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; for(var i:uint = 0; i &amp;lt; 512; i++)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;var n:Number = ba.readFloat() * 100;&lt;br /&gt;&amp;nbsp; &amp;nbsp;gt.lineTo(i, n);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 종료 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function barSoundCompletehandler(event:Event):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; removeEventListener(Event.ENTER_FRAME, barEnterFrameHandler); // 사운드 종료 후 이벤트 제거&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 볼륨 &lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 볼륨 범위 : 0 ~ 1 &lt;br /&gt;&amp;nbsp; *&amp;nbsp; SoundTransForm의 volume 속성 값 : 0 ~ 1&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Slider Component 값(정수값) : -1, 0, 1 &lt;br /&gt;&amp;nbsp; *&amp;nbsp; event.target : 마우스로 Slider를 클릭한 지점&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Slider(클래스) value(속성) : 현재 값을 가져오거나 설정.&lt;br /&gt;&amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이 값은 최소값과 최대값 사이에서 슬라이더 썸의 위치에 따라 결정.&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Slider : maximum = 10, minimum = 0&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function volumeSliderHandler(event:SliderEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; vol_tran = channel.soundTransform; // 현재 재생되고 있는 사운드의 볼륨 정보를 넘겨줌.&lt;br /&gt;&amp;nbsp; vol_tran.volume = event.target.value / 10; // 실제 보륨에 적용하기 위해 단위변환. &amp;nbsp;&lt;br /&gt;&amp;nbsp; channel.soundTransform = vol_tran; // 변환된 사운드의 볼륨을 다시 적용.&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 패닝 &lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 패닝 범위 : -1 ~ 1 &lt;br /&gt;&amp;nbsp; *&amp;nbsp; SoundTransForm의 volume 속성 값 : 0 ~ 1&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Slider Component 값(정수값) : -1, 0, 1 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function panSliderHandler(event:SliderEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; vol_tran = channel.soundTransform; // 현재 재생되고 있는 사운드의 패닝 정보를 넘겨줌.&lt;br /&gt;&amp;nbsp; vol_tran.pan = event.value;&lt;br /&gt;&amp;nbsp; channel.soundTransform = vol_tran; // 변환된 사운드의 패닝 다시 적용.&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 일시정지 버튼 &lt;br /&gt;&amp;nbsp; *&amp;nbsp; channel : 사운드 정지시 등록한 이벤트 제거&lt;br /&gt;&amp;nbsp; *&amp;nbsp; progress_mc : 사운드 정지시 진행상황 등록 이벤트 제거 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function pauseButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; pause_btn.mouseEnabled = false; // 일시정지버튼 비활성화&lt;br /&gt;&amp;nbsp; play_btn.mouseEnabled = true; // 재생 버튼 활성화&lt;br /&gt;&lt;br /&gt;&amp;nbsp; position = channel.position; // 현재 재생 위치 저장 &lt;br /&gt;&amp;nbsp; channel.stop(); // 사운드 정지&lt;br /&gt;&lt;br /&gt;&amp;nbsp; channel.removeEventListener(Event.SOUND_COMPLETE, barSoundCompletehandler);&lt;br /&gt;&amp;nbsp; progress_mc.removeEventListener(Event.ENTER_FRAME, barEnterFrameHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 재생 버튼 &lt;br /&gt;&amp;nbsp; *&amp;nbsp; channel : 재생이 끝나면 다시 재생시킬 수 있도록 이벤트 등록&lt;br /&gt;&amp;nbsp; *&amp;nbsp; progress_mc : 지속적으로 현재 재생 위치를 알아오기 위해 이벤트 등록&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function playButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; pause_btn.mouseEnabled = true; // 일시정지버튼 활성화&lt;br /&gt;&amp;nbsp; play_btn.mouseEnabled = false; // 재생버튼 비활성화&lt;br /&gt;&lt;br /&gt;&amp;nbsp; channel = music.play(position); // 사운드 재생 &lt;br /&gt;&amp;nbsp; vol_tran = channel.soundTransform;&amp;nbsp; // 현재 재생되고 있는 사운드의 볼륨, 패닝 정보를 넘겨줌.&lt;br /&gt;&amp;nbsp; vol_tran.volume = sound_vol.value / 10;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; channel.soundTransform = vol_tran; // 변환된 사운드의 볼륨, 패닝을 다시 적용.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; channel.addEventListener(Event.SOUND_COMPLETE, barSoundCompletehandler);&lt;br /&gt;&amp;nbsp; progress_mc.addEventListener(Event.ENTER_FRAME, barEnterFrameHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XLx815SdQK.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XLx815SdQK.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-3276998404358521970?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/3276998404358521970/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%82%AC%EC%9A%B4%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-mp3-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B4-%EC%99%84%EC%84%B1.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/3276998404358521970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/3276998404358521970'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%82%AC%EC%9A%B4%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-mp3-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B4-%EC%99%84%EC%84%B1.html' title='#사운드를 이용한 mp3 플레이어 완성'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-6422868836585263838</id><published>2010-03-27T02:08:00.000+09:00</published><updated>2011-01-29T19:56:35.615+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='사운드 패닝'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='stop()'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='SoundTransform'/><category scheme='http://www.blogger.com/atom/ns#' term='play()'/><category scheme='http://www.blogger.com/atom/ns#' term='사운드채널'/><category scheme='http://www.blogger.com/atom/ns#' term='volume'/><category scheme='http://www.blogger.com/atom/ns#' term='panning'/><category scheme='http://www.blogger.com/atom/ns#' term='사운드 편집'/><category scheme='http://www.blogger.com/atom/ns#' term='사운드 볼륨'/><title type='text'>#사운드를 이용한 mp3 플레이어_(3)SoundTransform</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;SoundTransform 클래스에는 볼륨, 패닝(왼쪽 스피커와 오른쪽 스피커의 음량 조절) 등에 &lt;/P&gt;&lt;P&gt;대한 속성이 포함되어 있다. 따라서 사운드의 볼륨과 패닝을 조절하기 위해서는 SoundTransform 클래스를 이용해야한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XfrD4mgpD8.jpg" style="width:431px;height:336px;" alt=""  /&gt;&lt;/div&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SoundTransform 객체를 생성하는 방법에는 두가지가 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;첫번째&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;var vol_tran:SoundTransform = channel.soundTransform;&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;두번째 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;var vol_tran:SoundTransform = new SoundTransform(1, 0);&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;첫번째 방법은 SoundChannel 클래스의 soundTransform 속성을 사용하여 생성한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XPaqNFGurm.jpg" style="width:409px;height:114px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;두번째 방법은 SoundTransform 클래스에서 객체를 생성한다.&lt;/P&gt;&lt;P&gt;첫번째 파라미터는 볼륨값이고, 두번째 파라미터는 패닝값이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XddjPuw9QJ.jpg" style="width:405px;height:113px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;첫번째 방법을 이용하여 사운드 볼륨과 패닝을 조절하겠다. 그럼 이제 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import fl.events.SliderEvent;&lt;br /&gt;import fl.controls.Slider;&lt;br /&gt;&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.media.Sound;&lt;br /&gt;import flash.media.SoundChannel;&lt;br /&gt;import flash.media.SoundTransform;&lt;br /&gt;import flash.net.URLRequest;&lt;br /&gt;&lt;br /&gt;public class MyMusic extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function MyMusic()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super(); // Sprite 클래스(상속하는 상위클래스)&amp;nbsp; 생성.&lt;br /&gt;&amp;nbsp; configureSound(); // 사운드 설정&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; * &amp;nbsp; 사운드 객체 : 객체 생성시 자동으로 사운드 파일 로드.&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var music:Sound = new Sound(new URLRequest("힘을내줘.mp3"));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 채널&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var channel:SoundChannel;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 현재 재생 위치(ms)&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var position:Number = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 변환 : 볼륨 및 패닝 속성 포함.&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var vol_tran:SoundTransform;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 초기화 &lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Slider(클래스) snapInterval(속성) : 패닝 slider 이동시 값이 증가하거나 감소하는 기준 간격 설정.&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function configureSound():void&lt;br /&gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp; pan_slider.maximum = 1; // 패닝 Slider 최대값 설정.&lt;br /&gt;&amp;nbsp; pan_slider.minimum = -1; // 패닝 Slider 최소값 설정.&lt;br /&gt;&amp;nbsp; pan_slider.value = 0; &amp;nbsp;&amp;nbsp; // 기본값 0으로 설정.&lt;br /&gt;&amp;nbsp; pan_slider.snapInterval = 0.1; // 0.1만큼 증가 감소.&lt;br /&gt;&amp;nbsp; pause_btn.mouseEnabled = false; // 일시정지버튼 비활성화.&lt;br /&gt;&amp;nbsp; play_btn.mouseEnabled = true; &amp;nbsp; // 재생 버튼 활성화.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; pause_btn.addEventListener(MouseEvent.CLICK, pauseButtonClickHandler); //일시정지버튼 이벤트 등록.&lt;br /&gt;&amp;nbsp; play_btn.addEventListener(MouseEvent.CLICK, playButtonClickHandler); // 재생버튼 이벤트 등록.&lt;br /&gt;&amp;nbsp; sound_vol.addEventListener(SliderEvent.THUMB_DRAG, volumeSliderHandler); // 볼륨조절 이벤트 등록&lt;br /&gt;&amp;nbsp; pan_slider.addEventListener(SliderEvent.THUMB_DRAG, panSliderHandler); // 패닝조절 이벤트 등록&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 볼륨 &lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 볼륨 범위 : 0 ~ 1 &lt;br /&gt;&amp;nbsp; *&amp;nbsp; SoundTransForm의 volume 속성 값 : 0 ~ 1&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Slider Component 값(정수값) : -1, 0, 1 &lt;br /&gt;&amp;nbsp; *&amp;nbsp; event.target : 마우스로 Slider를 클릭한 지점&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Slider(클래스) value(속성) : 현재 값을 가져오거나 설정.&lt;br /&gt;&amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이 값은 최소값과 최대값 사이에서 슬라이더 썸의 위치에 따라 결정.&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Slider : maximum = 10, minimum = 0&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function volumeSliderHandler(event:SliderEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; vol_tran = channel.soundTransform; // 현재 재생되고 있는 사운드의 볼륨 정보를 넘겨줌.&lt;br /&gt;&amp;nbsp; vol_tran.volume = event.target.value / 10; // 실제 보륨에 적용하기 위해 단위변환.&lt;br /&gt;&amp;nbsp; channel.soundTransform = vol_tran; // 변환된 사운드의 볼륨을 다시 적용.&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 패닝 &lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 패닝 범위 : -1 ~ 1 &lt;br /&gt;&amp;nbsp; *&amp;nbsp; SoundTransForm의 volume 속성 값 : 0 ~ 1&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Slider Component 값(정수값) : -1, 0, 1 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function panSliderHandler(event:SliderEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; vol_tran = channel.soundTransform; // 현재 재생되고 있는 사운드의 패닝 정보를 넘겨줌.&lt;br /&gt;&amp;nbsp; vol_tran.pan = event.value;&lt;br /&gt;&amp;nbsp; channel.soundTransform = vol_tran; // 변환된 사운드의 패닝 다시 적용.&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 일시정지 버튼&amp;nbsp; &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function pauseButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; pause_btn.mouseEnabled = false; // 일시정지버튼 비활성화.&lt;br /&gt;&amp;nbsp; play_btn.mouseEnabled = true; // 재생 버튼 활성화.&lt;br /&gt;&amp;nbsp; position = channel.position; // 현재 재생 위치 저장.&lt;br /&gt;&amp;nbsp; channel.stop(); // 사운드 정지.&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 재생 버튼 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function playButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; pause_btn.mouseEnabled = true; // 일시정지버튼 활성화.&lt;br /&gt;&amp;nbsp; play_btn.mouseEnabled = false; // 재생버튼 비활성화.&lt;br /&gt;&amp;nbsp; channel = music.play(position); // 사운드 재생.&lt;br /&gt;&amp;nbsp; vol_tran = channel.soundTransform;&amp;nbsp; // 현재 재생되고 있는 사운드의 볼륨, 패닝 정보를 넘겨줌.&lt;br /&gt;&amp;nbsp; vol_tran.volume = sound_vol.value / 10;&lt;br /&gt;&amp;nbsp; channel.soundTransform = vol_tran; // 변환된 사운드의 볼륨, 패닝을 다시 적용.&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="179" width="394" data="http://ss.textcube.com/blog/7/70627/attach/XNLjCwzLvF.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XNLjCwzLvF.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-6422868836585263838?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/6422868836585263838/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%82%AC%EC%9A%B4%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-mp3-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B43soundtransform.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6422868836585263838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6422868836585263838'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%82%AC%EC%9A%B4%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-mp3-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B43soundtransform.html' title='#사운드를 이용한 mp3 플레이어_(3)SoundTransform'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-5113911067454740142</id><published>2010-03-26T17:36:00.000+09:00</published><updated>2011-01-29T19:56:35.547+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sound stop'/><category scheme='http://www.blogger.com/atom/ns#' term='sound play'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='MP3플레이어'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='URLRequest'/><category scheme='http://www.blogger.com/atom/ns#' term='사운드채널'/><category scheme='http://www.blogger.com/atom/ns#' term='SoundChannel'/><title type='text'>#사운드를 이용한 mp3 플레이어_(2)SoundChannel</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;사운드 일시정지와 재생을 만들어보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 사운드 재생 : &amp;nbsp;Sound 클래스의 play() 메서드 담당.&lt;/P&gt;&lt;P&gt;- 사운드 일시정지 : SoundChannel 클래스의 stop() 메서드 담당.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런데 Sound 클래스의 play()메서드를 살펴보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XTRfEnzuQE.bmp" style="width:440px;height:139px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;play() 메서드를 실행하면 리턴값으로 SoundChannel을 반환한다. &lt;/P&gt;&lt;P&gt;따라서 일시정지를 하려면 Sound 클래스의 play() 메서드를 통해 생성해야한다. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XV0ob2UcIB.jpg" style="width:428px;height:123px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XV0ob2UcIB.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;var sound:Sound = new Sound(new URLRequest("힘을내줘.mp3"));&lt;br /&gt;&lt;br /&gt;var channel:SoundChannel = sound.play(); // SoundChannel 객체 생성&lt;br /&gt;&lt;br /&gt;channel.stop();&lt;br /&gt;[/code]&lt;br /&gt;&lt;/P&gt;&lt;P&gt;이렇게 하면 사운드를 정지시킬 수 있께 된다. 정지시킨 다음에 다시 재생을 해보자.&lt;/P&gt;&lt;P&gt;그럼 처음부터 다시 재생이 된다. 처음부터 재생되는 것이 아니라 일시정지된 지점부터 재생되게 하고싶다. &lt;/P&gt;&lt;P&gt;사운드의 정지된 지점을 알고 싶을 때는 SoundChannel 클래스의 position속성을 사용한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XcFRQQBUKd.jpg" style="width:452px;height:121px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;var position:Number = 0;&lt;br /&gt;&lt;br /&gt;var sound:Sound = new Sound(new URLRequest("힘을내줘.mp3"));&lt;br /&gt;&lt;br /&gt;var channel:SoundChannel = sound.play(); // SoundChannel 객체 생성&lt;br /&gt;&lt;br /&gt;position&amp;nbsp; = channel.position;&amp;nbsp; // 사운드가 재생되는 현재위치 저장.&lt;br /&gt;&lt;br /&gt;channel.stop(); // 사운드 정지.&lt;br /&gt;&lt;br /&gt;sound.play(position); // 사운드가 저장된 위치부터 다시 재생.&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 제대로 한번 만들어보자. &lt;/P&gt;&lt;P&gt;새로운 플래시 파일을 하나 만들고 거기에 2개의 무비클립 재생버튼(play_btn)과 일시정지버튼(pause_btn)을 만들어 사운드가 재생, 일시정지 되도록 만들어보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.media.Sound;&lt;br /&gt;import flash.media.SoundChannel;&lt;br /&gt;import flash.net.URLRequest;&lt;br /&gt;&lt;br /&gt;public class MyMusic extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function MyMusic()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super(); // Sprite 클래스(상속하는 상위클래스)&amp;nbsp; 생성&lt;br /&gt;&amp;nbsp; configureSound(); // 사운드 설정 메서드 호출&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private &lt;br /&gt;&amp;nbsp; * &amp;nbsp; 사운드 객체 : 객체 생성시 자동으로 사운드 파일 로드&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var music:Sound = new Sound(new URLRequest("힘을내줘.mp3")); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 채널&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var channel:SoundChannel;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 현재 재생 위치(ms)&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private var position:Number = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 사운드 버튼 설정 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function configureSound():void&lt;br /&gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp; pause_btn.mouseEnabled = false; // 일시정지버튼 비활성화&lt;br /&gt;&amp;nbsp; play_btn.mouseEnabled = true; &amp;nbsp; // 재생 버튼 활성화&lt;br /&gt;&amp;nbsp; pause_btn.addEventListener(MouseEvent.CLICK, pauseButtonClickHandler); //일시정지버튼 이벤트 등록&lt;br /&gt;&amp;nbsp; play_btn.addEventListener(MouseEvent.CLICK, playButtonClickHandler); // 재생버튼 이벤트 등록&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 일시정지 버튼 클릭 &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function pauseButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; pause_btn.mouseEnabled = false; // 일시정지버튼 비활성화&lt;br /&gt;&amp;nbsp; play_btn.mouseEnabled = true; // 재생 버튼 활성화&lt;br /&gt;&amp;nbsp; position = channel.position; // 현재 재생 위치 저장 &lt;br /&gt;&amp;nbsp; channel.stop(); // 사운드 정지&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 재생 버튼 클릭&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private function playButtonClickHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; pause_btn.mouseEnabled = true; // 일시정지버튼 활성화&lt;br /&gt;&amp;nbsp; play_btn.mouseEnabled = false; // 재생버튼 비활성화&lt;br /&gt;&amp;nbsp; channel = music.play(position); // 사운드 재생 &lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="183" width="327" data="http://ss.textcube.com/blog/7/70627/attach/XTiaalBG9c.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XTiaalBG9c.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;실행시켜보자. &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-5113911067454740142?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/5113911067454740142/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%82%AC%EC%9A%B4%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-mp3-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B42soundchannel.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5113911067454740142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5113911067454740142'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%82%AC%EC%9A%B4%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-mp3-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B42soundchannel.html' title='#사운드를 이용한 mp3 플레이어_(2)SoundChannel'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-2351111238655337156</id><published>2010-03-26T12:24:00.000+09:00</published><updated>2011-01-29T19:56:35.462+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='MP3플레이어'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='sound'/><category scheme='http://www.blogger.com/atom/ns#' term='URLRequest'/><category scheme='http://www.blogger.com/atom/ns#' term='사운드'/><category scheme='http://www.blogger.com/atom/ns#' term='Sound 클래스'/><title type='text'>#사운드를 이용한 mp3 플레이어_(1)Sound</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;사운드를 이용하기 위해서는 사운드의 재생, 로드, 정지, 볼륨 등의 기능을 담당하고 있는&lt;/P&gt;&lt;P&gt;각각의 클래스를 알아야한다. 사운드 관련 클래스는 flash.media 패키지에 안에 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사운드의 기능을 담당하는 클래스들이 분리되어 있어 패키지안에 있는 클래스를 잘 알아봐야한다. 주로 쓰이는 클래스들을 간다히 정리해보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;TABLE style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 450px; BORDER-BOTTOM: medium none; HEIGHT: 144px" cellSpacing=1 cellPadding=0 bgColor=#aaaaaa&gt;&lt;TBODY&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;flash.media.&lt;FONT color=#4dbf00&gt;Sound&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;사운드 로드 및 재생 &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;flash.media.&lt;FONT color=#4dbf00&gt;SoundChannel&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;사운드 채널 볼륨 제어&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;flash.media.&lt;FONT color=#4dbf00&gt;SoundLoaderContext&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;보안 / 버퍼링&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;flash.media.&lt;FONT color=#4dbf00&gt;SoundMixer&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;스트리밍사운드 제어&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;flash.media.&lt;FONT color=#4dbf00&gt;SoundTransform&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;패닝 및 볼륨 조절&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;참조&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/"&gt;&lt;FONT color=#ff6600&gt;https://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#ff6600&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://help.adobe.com/ko_KR/AS3LCR/Flash_10.0/index.html?flash/display/Graphics.html&amp;amp;flash/display/class-list.html"&gt;&lt;FONT color=#ff6600&gt;http://help.adobe.com/ko_KR/AS3LCR/Flash_10.0/index.html?flash/display/Graphics.html&amp;amp;flash/display/class-list.html&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1.&amp;nbsp; Sound 클래스&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XWW4p5mwV1.jpg" style="width:327px;height:216px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Sound 객체를 만들고 외부 MP3파일을 해당 객체로 로드할여 재생할 수 있으며, 사운드 스트림을 닫고, 스트림의 바이트 수 및 ID3 메타데이터에 대한 정보 같은 사운드 관련 데이터에 액세스할 수 있다. 한마디로 주요 기능은 외부 MP3 파일을 로드, 재생 한다는 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;주요 기능인 로드, 재생 메서드를 살펴보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XMLwkCw8XN.jpg" style="width:409px;height:89px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1.1 외부 사운드 파일 재생(mp3 포맷만 지원)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사운드를 재생하면 먼저 Sound객체를 이용하여 Sound 객체를 만들어야한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;여기서 알아야 할 것은 외부에서 파일을 불러오려면 URLRequest 클래스를 이용해야한다. &lt;/P&gt;&lt;P&gt;위의 메서드에서 봤듯이 Sound 클래스에서 파일을 로드할 때 첫 번째 파라미터인 stream은 &lt;br /&gt;URLRequset로 되어있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;URLRequest 클래스는 " 하나의 HTTP 요청에 포함된 모든 정보를 캡처 "하는 클래스이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;캡쳐?..음..이해가 잘 안되는 군...그래서 &lt;A href="http://igna.textcube.com/" target=_blank&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;야훔님&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;께서 해주신 설명에 따르면...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff4c4c&gt;# URLRequest 클래스&lt;/FONT&gt; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 통신을 하기위해 기본적으로 갖춰야할 데이터를 저장하는 VO 클래스라고 볼 수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff4c4c&gt;# VO 클래스(Value Object)&lt;/FONT&gt; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-&amp;nbsp; 값을 저장 하기 위해 미리 Field를 만들어두고 값을 저장하게 끔 만들어진 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 모델 데이터 클래스를 이야기한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;잘 이해가 안될것 같아 다음번에 예제를 통해 다시 설명을 하겠다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;어쨌든 외부에서 파일을 가져오려면 URLRequest를 이용해서 가져와야한다는 것만 알아두자.&lt;/P&gt;&lt;P&gt;그럼 이제 하나씩 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;플래시에서 파일 하나를 만들자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XNeMIBh7ta.jpg" style="width:442px;height:388px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XSEOT43bhZ.jpg" style="width:410px;height:128px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위에서 처럼 플래시파일, AS파일, 음악 파일은 한 폴더안에 만들었다. 그러고나서 설정해야하는 것이 플래시파일 properties 에서 class로 연결해 주어야한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XMHzE3TGj5.bmp" style="width:283px;height:248px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.media.Sound;&lt;br /&gt;import flash.net.URLRequest;&lt;br /&gt;&lt;br /&gt;public class MyMusic extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function MyMusic()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; var file:URLRequest = new URLRequest("안녕나의사랑.mp3");&lt;br /&gt;&lt;br /&gt;&amp;nbsp; var music:Sound = new Sound();&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; music.load(file);&lt;br /&gt;&amp;nbsp; music.play();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;실행시켜보자. 노래가 잘 나오는가? 음..로드가 잘되었군.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;13번째~18번째 라인을 이렇게도 쓸수있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;var music:Sound = new Sound(new URLRequest("안녕나의사랑.mp3"));&lt;br /&gt;&lt;br /&gt;music.play();&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-2351111238655337156?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/2351111238655337156/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%82%AC%EC%9A%B4%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-mp3-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B41sound.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2351111238655337156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2351111238655337156'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%82%AC%EC%9A%B4%EB%93%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-mp3-%ED%94%8C%EB%A0%88%EC%9D%B4%EC%96%B41sound.html' title='#사운드를 이용한 mp3 플레이어_(1)Sound'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-6341311839111209936</id><published>2010-03-25T14:20:00.000+09:00</published><updated>2011-01-29T19:56:35.285+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='hitTest'/><category scheme='http://www.blogger.com/atom/ns#' term='hitTestPoint()'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0 충돌감지'/><title type='text'>(3) 충돌 감지 _ hitTestPoint()</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;hitTestPoint()&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean 메서드는 영역대 포인트를 감지해서 hit를 발생시킨다. 여기서 말하는 영역이란 Flash에서 무비클립을 하나 만들면 그 무비클립 외각에 생기는 사각형 영역을 말한다. point는 객체를 말하는 것이다.&lt;/P&gt;&lt;P&gt;즉, 객체만을 인식하겠다는 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;hitTestPoint()는 DisplayObject클래스의 메서드로 3개의 매개변수를 갖는다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#000000&gt;hitTestPoint(x:Number, y:Number, &lt;FONT color=#338000&gt;shapeFlag&lt;/FONT&gt;:Boolean = false):Boolean&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;x는 x좌표, y는 y좌표, shapeFlag는 객체(&lt;FONT face="Courier New"&gt;true&lt;/FONT&gt;)의 실제 픽셀을 검사할 것인지 아니면 경계 상자(&lt;FONT face="Courier New"&gt;false&lt;/FONT&gt;)를 검사할 것인지를 나타낸다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;여기서 shapeFlag = true로 하면 영역을 인식하는 것이 아니라 객체만 인식하겠다는 것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.MovieClip;&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;import flash.events.TimerEvent;&lt;br /&gt;import flash.utils.Timer;&lt;br /&gt;&lt;br /&gt;public class Main extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function Main()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; setTimer();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function setTimer():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var timer:Timer = new Timer(200, 50);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; timer.addEventListener(TimerEvent.TIMER, timerEventHandler);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; timer.start();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function timerEventHandler(event:TimerEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var temp:Star = new Star();&lt;br /&gt;&amp;nbsp; temp.tx = Math.random()* 3 + 1; &lt;br /&gt;&amp;nbsp; temp.ty = Math.random()* 3 + 1; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; addChild(temp);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; temp.addEventListener(Event.ENTER_FRAME, tempEnterFrameHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function tempEnterFrameHandler(event:Event):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var mc:MovieClip = MovieClip(event.target);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(mc.x &amp;lt; 0 || mc.x &amp;gt; stage.stageWidth)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;mc.tx = -mc.tx; // swiching해줌 &lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(mc.y &amp;lt; 0 || mc.y &amp;gt; stage.stageHeight)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;mc.ty = -mc.ty;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if( bg.hitTestPoint(mc.x, mc.y, true)) &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;mc.gotoAndStop(2);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;mc.rotate = -5; //&amp;nbsp; dynamic 변수 &lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;mc.gotoAndStop(1);&lt;br /&gt;&amp;nbsp; &amp;nbsp;mc.rotate = 5;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; mc.x += mc.tx;&lt;br /&gt;&amp;nbsp; mc.y += mc.ty;&lt;br /&gt;&amp;nbsp; mc.rotation += mc.rotate;&lt;br /&gt;&amp;nbsp;} &lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XCM1BEmnye.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XCM1BEmnye.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;30~31번째 라인에서 정의 되지 않는 속성 tx, ty를 사용하였는데 이렇게 정의 되지 않는 속성을 사용할 수 있는 것은 MovieClip이 다이나믹으로 정의되어 있어서이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XLiMU6EDUo.bmp" style="width:409px;height:270px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;MovieClip이 다이나믹으로 되어있어서 변수명을 아무렇게나 지정해 주어도 생성한다.&lt;/P&gt;&lt;P&gt;대표적인 예로 object가 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;var o:Object = new Object();&lt;br /&gt;&lt;br /&gt;o.a = 1; // 속성에는 a, b 가 없지만 a,b를 생성해준다.&lt;br /&gt;o.b = 2&lt;br /&gt;&lt;br /&gt;trace(a); // 1 출력&lt;br /&gt;trace(b); // 2 출력&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-6341311839111209936?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/6341311839111209936/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/3-%EC%B6%A9%EB%8F%8C-%EA%B0%90%EC%A7%80-hittestpoint.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6341311839111209936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6341311839111209936'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/3-%EC%B6%A9%EB%8F%8C-%EA%B0%90%EC%A7%80-hittestpoint.html' title='(3) 충돌 감지 _ hitTestPoint()'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-2336640940723425989</id><published>2010-03-25T10:41:00.000+09:00</published><updated>2011-01-29T19:56:35.388+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='hitTestObject()'/><category scheme='http://www.blogger.com/atom/ns#' term='영역 대 영역 감지'/><category scheme='http://www.blogger.com/atom/ns#' term='충돌감지'/><title type='text'>(2) 충돌감지 _ hitTestObject()</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;hitTestObject()&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;hitTestObject(obj:DisplayObject):Boolean 메서드는 영역 대 영역을 감지하여 hit를 발생시킨다. 여기서 말하는 영역이란 Flash에서 무비클립을 하나 만들면 그 무비클립 외각에 생기는 사각형 영역을 말한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XMNPfIlYcx.jpg" style="width:298px;height:292px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위에서 파란색 사각형이 핑크색 무비클립의 영역에 해당한다. 그럼 이제 hitTestObject() 메서드를 이용한 예제를 한번 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package classes.display&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;&lt;br /&gt;public class Main extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function Main()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; cir_mc.addEventListener(MouseEvent.MOUSE_DOWN, cirMouseDownHandler);&lt;br /&gt;&amp;nbsp; cir_mc.addEventListener(MouseEvent.MOUSE_UP, cirMouseUpHandler);&lt;br /&gt;&amp;nbsp; rect_mc.addEventListener(MouseEvent.MOUSE_DOWN, rectMouseDownHandler);&lt;br /&gt;&amp;nbsp; rect_mc.addEventListener(MouseEvent.MOUSE_UP, rectMouseUpHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function cirMouseDownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; cir_mc.alpha = 0.3;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function cirMouseUpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(cir_mc.hitTestObject(cirFrame_mc))&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;cir_mc.x = cirFrame_mc.x;&lt;br /&gt;&amp;nbsp; &amp;nbsp;cir_mc.y = cirFrame_mc.y;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function rectMouseDownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; rect_mc.alpha = 0.3;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private function rectMouseUpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(rect_mc.hitTestObject(rectFrame_mc))&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;rect_mc.x = rectFrame_mc.x;&lt;br /&gt;&amp;nbsp; &amp;nbsp;rect_mc.y = rectFrame_mc.y;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XDE9fYFuxU.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XDE9fYFuxU.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 핑크 사각형을 드래그해서 점선 사각형 안에 넣으면 hit가 발생한다. 음...사각형으로 해서 그런가 그닥 와닿지 않는것 같아 원형으로 한번 더 만들어 보겠다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XfphlPVar6.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XfphlPVar6.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 원을 점선 원안에 넣으면 hit가 발생한다. 원과 원이 닿지도 않았는데 hit가 발생했다.&lt;/P&gt;&lt;P&gt;이것이 바로 영역을 인식하여 hit를 발생시키는 hitTestObject()이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XaGdHvDGkL.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XaGdHvDGkL.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이제 조금 감이 오는가? 이렇게 무비클립자체의 shape가 닿아서 발생하는 것이 아니라 &lt;/P&gt;&lt;P&gt;무비클립 외각의 사각형 영역끼리 닿으면 hit가 발생하는 것, 이것이 hitTestObject()이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 코드에 해당하는 실제 예제는 아래와 같다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XG44bDFywj.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XG44bDFywj.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-2336640940723425989?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/2336640940723425989/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/2-%EC%B6%A9%EB%8F%8C%EA%B0%90%EC%A7%80-hittestobject.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2336640940723425989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2336640940723425989'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/2-%EC%B6%A9%EB%8F%8C%EA%B0%90%EC%A7%80-hittestobject.html' title='(2) 충돌감지 _ hitTestObject()'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-6369492177689916027</id><published>2010-03-24T21:57:00.000+09:00</published><updated>2011-01-29T19:56:35.339+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='symbol Linkage'/><category scheme='http://www.blogger.com/atom/ns#' term='Linkage 설정'/><category scheme='http://www.blogger.com/atom/ns#' term='Symbol'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='flash Linkage'/><category scheme='http://www.blogger.com/atom/ns#' term='symbol properies'/><title type='text'>Symbol의 Linkage 설정</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;Linkage 설정&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. 플래시 파일에서 심볼을 만들고, 그 심볼을 Linkage 시킬 때, Class명 과 Base class명을 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 입력할 수 있다. 처음에는 자동으로 심볼명과 같은 이름이 입력된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 플래시에서는자동으로 심볼을 클래스로 만들어 주는데, Linage에서 설정한 Class명을&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 가지고 클래스를 만든다는 것이다. 그러므로 Class명은 꼭 대문자로 써 주어야 한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XSNJW5gauF.bmp" style="width:421px;height:551px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XSNJW5gauF.bmp')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;여기선 circle이라는 이름을 가진 심볼을 Circle이라는 이름의 클래스를 만들어 Linkage 시키겠다는 것이다. (대소문자 구분) Class명 주는 부분 아래에 보면 Base class라는 것이 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/Xfta5NT1GY.bmp" style="width:421px;height:551px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/Xfta5NT1GY.bmp')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Class는 Base class를 상속받는다. 위의 내용으로 설명하자면 Circle 클래스는 flash.display 패키지에 있는&amp;nbsp; MovieClip 클래스를 상속받는 것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;즉,&amp;nbsp; &lt;FONT color=#662900&gt;Class&lt;/FONT&gt; &lt;FONT color=#002fff&gt;extends&lt;/FONT&gt;&lt;FONT color=#662900&gt; Base class&lt;/FONT&gt;&lt;FONT color=#bf4c00&gt; &lt;/FONT&gt;이렇게 되는 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;만약, Class 명과 Base class 명이 같다면 Class는 자기자신이 된다. &lt;/P&gt;&lt;P&gt;(왜냐하면 자기자신을 상속받았으니까.)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2.&amp;nbsp; 플래시에서 만든 무비클립은 Sprite로 만든 것보다 무겁다는 것이다. 그래서 애니메이션등과 같은 것을 만드는 것이 아니면 Sprite로 만들어 addChild() 시켜 사용하는 것이 더 좋다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#000000&gt;&lt;FONT color=#4dbf00&gt;h&lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/"&gt;&lt;FONT color=#4dbf00&gt;ttps://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-6369492177689916027?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/6369492177689916027/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/symbol%EC%9D%98-linkage-%EC%84%A4%EC%A0%95.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6369492177689916027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6369492177689916027'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/symbol%EC%9D%98-linkage-%EC%84%A4%EC%A0%95.html' title='Symbol의 Linkage 설정'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-1419875710098866146</id><published>2010-03-23T12:03:00.000+09:00</published><updated>2011-01-29T19:56:35.160+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Drag'/><category scheme='http://www.blogger.com/atom/ns#' term='드래그 앤 드롭'/><category scheme='http://www.blogger.com/atom/ns#' term='드래그'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='드롭'/><category scheme='http://www.blogger.com/atom/ns#' term='drop'/><category scheme='http://www.blogger.com/atom/ns#' term='drag&amp;amp;drop'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript3.0'/><title type='text'>(1) Drag &amp; Drop</title><content type='html'>&lt;P&gt;먼저 간단한 예제를 하나 만들어보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package classes.display&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;&lt;br /&gt;public class DragExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function DragExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; buttonMode = true;&lt;br /&gt;&amp;nbsp; addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);&lt;br /&gt;&amp;nbsp; addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;private function mouseDownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; this.startDrag();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;private function mouseUpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; this.stopDrag();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XUwLctHM0F.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XUwLctHM0F.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 핑크색 사각에 마우스를 대면 손모양으로 바뀌며 사각형을 드래그 할 수 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런데 Sprite 메서드에서 startDrag()메서드에 2개의 매개변수값을 지정할 수 있었다.&lt;/P&gt;&lt;P&gt;startDrag(lockCenter :Boolean = false, bounds;Rectangle = null) 이렇게..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#338000&gt;(1) lockCenter : Boolean&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;lockCenter는 " 드래그 가능 Sprite가 마우스 위치의 가운데에서 잠기는지(&lt;FONT face="Courier New"&gt;true&lt;/FONT&gt;) 아니면 사용자가 Sprite를 맨 처음 클릭한 곳에서 잠기는지(&lt;FONT face="Courier New"&gt;false&lt;/FONT&gt;)를 지정한다 "라고 설명을 해 놓았지만.. 무슨말인지...그래서 위에 있는 코드에 값을 넣어보겠다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package classes.display&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;&lt;br /&gt;public class DragExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function DragExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; buttonMode = true;&lt;br /&gt;&amp;nbsp; addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);&lt;br /&gt;&amp;nbsp; addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;private function mouseDownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; this.startDrag(true, null);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;private function mouseUpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; this.stopDrag();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;18번째 라인에 lockCenter값을 true로 넣어주었다. 실행결과를 확인해 보면 핑크사각형 위의 어느 부분에서든 마우스를 클릭하게 되면 그 클릭한 부분이 중심이 되어 lock이 되는 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XMIv4awFcQ.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XMIv4awFcQ.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;loockCenter = true 로 하면 위와 같이 되며 일반적으로 false이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#338000&gt;(2) bounds : Rectangle&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;bounds는 " Sprite의 제한 영역을 지정하는 Sprite의 부모의 좌표와 관련된 값입니다. "이다.&lt;/P&gt;&lt;P&gt;음...Sprite의 제한영역을 지정한다...한번 만들어보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package classes.display&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.geom.Rectangle;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;&lt;br /&gt;public class DragExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function DragExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; buttonMode = true;&lt;br /&gt;&amp;nbsp; addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);&lt;br /&gt;&amp;nbsp; addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;private function mouseDownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var rectangle:Rectangle = new Rectangle( 0, 0, 200, 200); &amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; this.startDrag(false, rectangle);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;private function mouseUpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; this.stopDrag();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="304" width="380" data="http://ss.textcube.com/blog/7/70627/attach/XMUziK3waN.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XMUziK3waN.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;19번째 라인에서 Rectangle클래스를 이용하여 일정한 영역만큼 값을 주어 그 영역 안에서만 움직일 수 있도록 하였다. 이것이 bounds이다. 위의 핑그색 사각형을 이동시켜보면 파란색 영역까지만 움직인다. 이렇게 영역을 제한하는 것이 bounds이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;음....그런데 여기서 뭔가 이상한 걸 느끼지 않았나? 잘 보면 사각형을 마우스 다운해서 이동시킨 후에 파란색 영역 바깥에서 마우스 업시키면 계속해서 사각형이 이동한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;MouseEvent.MOUSE_UP은 객체를 마우스 다운해서 이동시킨 후 그 객체 위에서 마우스 업을 하지 않으면 계속 이동(Drag)된 상태가 유지된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;만약, 객체 위에서가 아닌 다른 영역에서 MOUSE_UP이 되게 하고 싶으면 stage를 쓰면된다.&lt;/P&gt;&lt;P&gt;브라우저(Flash&lt;SUP&gt;®&lt;/SUP&gt; Player)에서 실행 중인 SWF 내용의 경우 Stage는 Flash 내용이 표시되는 전체 영역을 나타낸다.(가장 최상위)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package classes.display&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.geom.Rectangle;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;&lt;br /&gt;public class DragExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function DragExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; buttonMode = true;&lt;br /&gt;&amp;nbsp; addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);&lt;br /&gt;&amp;nbsp; stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;private function mouseDownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var rectangle:Rectangle = new Rectangle( 0, 0, 200, 200); &amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; this.startDrag(false, rectangle);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;private function mouseUpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; this.stopDrag();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="304" width="380" data="http://ss.textcube.com/blog/7/70627/attach/XG9HtaUOlu.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XG9HtaUOlu.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;15번째 라인에서 이벤트를 stage에 걸어주어 사각형 바깥영역에서 마우스 업이 되게 하였다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;* Drag &amp;amp; Drop을 배우면서 얻은 정보 *&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;mouseDownHandler 같은 메서드는 많이 쓰인다. 만약, 이 mouseDownHandler를 쓰고 있는 클래스를 상속받는 곳에서 다시 mouseDownHandler를 사용해서 쓰려고 하면 충돌나서 에러난다. 따라서 상속하려는 상위클래스의 mouseDownHanlder를 protected로 지정해 주어 사용하면 된다. &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-1419875710098866146?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/1419875710098866146/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/1-drag-drop.html#comment-form' title='2개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/1419875710098866146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/1419875710098866146'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/1-drag-drop.html' title='(1) Drag &amp;amp; Drop'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-3116922988304074021</id><published>2010-03-22T22:24:00.000+09:00</published><updated>2011-01-29T19:56:35.015+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='Sprite'/><category scheme='http://www.blogger.com/atom/ns#' term='sprite클래스'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript3.0'/><title type='text'>4.Sprite 클래스</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;Sprite 클래스&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Sprite 클래스는 MovieClip 클래스의 기능을 대체하는 클래스로 타임라인이 필요 없는 객체에 적합한 기본 클래스이다. Sprite는 일반적으로 타임라인을 사용하지 않는 사용자 인터페이스(UI) 구성요소에 대한 논리 기본 클래스가 된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XBJg8zk5Q9.bmp" style="width:463px;height:275px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;FONT color=#ff6600&gt;참조 : &lt;U&gt;&lt;A href="http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/" target=_blank&gt;&lt;FONT color=#ff6600&gt;www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/&lt;/FONT&gt;&lt;/A&gt;&lt;/U&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Sprite 클래스에 대해서도 간다히 알아봤으니, 이제 속성과 메서드를 알아보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;속성&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;TABLE style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 450px; BORDER-BOTTOM: medium none; HEIGHT: 40px" cellSpacing=1 cellPadding=0 bgColor=#aaaaaa&gt;&lt;TBODY&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;buttonMode :&lt;FONT color=#d9ffbf&gt; &lt;/FONT&gt;&lt;FONT color=#4dbf00&gt;Boolean&lt;/FONT&gt;&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;버튼 모드&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;dropTarget : &lt;FONT color=#4dbf00&gt;DisplayObject &lt;/FONT&gt;&lt;P&gt;[read-only]&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;드래그하는 Sprite 아래&amp;nbsp; &lt;P&gt;&amp;nbsp;의 표시 객체 또는 &lt;/P&gt;&lt;P&gt;&amp;nbsp;Sprite를 드래그해 놓은 &lt;/P&gt;&lt;P&gt;&amp;nbsp;표시 객체를 지정.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;graphics : &lt;FONT color=#4dbf00&gt;Graphics&lt;/FONT&gt; &lt;P&gt;[read-olny]&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;벡터 드로잉 명령을 내 &lt;P&gt;&amp;nbsp;릴 수 있는 이 Sprite에&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;속한 Graphics 객체를 &lt;/P&gt;&lt;P&gt;&amp;nbsp;지정.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;hitArea : &lt;FONT color=#4dbf00&gt;Sprite&lt;/FONT&gt;&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;Sprite의 히트 영역으로 &lt;P&gt;&amp;nbsp;사용할 다른 Sprite를 &lt;/P&gt;&lt;P&gt;&amp;nbsp;지정.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&lt;P&gt;&amp;nbsp;soundTransform :&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;FONT color=#4dbf00&gt;SoundTransform&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P&gt;&amp;nbsp;Sprite 내에서 사운드를 &lt;/P&gt;&lt;P&gt;&amp;nbsp;제어.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&lt;P&gt;&amp;nbsp;useHandCursor :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;FONT color=#4dbf00&gt;Boolean&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P&gt;&amp;nbsp;buttonMode 속성이 &lt;/P&gt;&lt;P&gt;&amp;nbsp;true로 설정된 Sprite 위&lt;/P&gt;&lt;P&gt;&amp;nbsp;로 마우스를 움직일 때 &lt;/P&gt;&lt;P&gt;&amp;nbsp;손 모양(손 모양 커서)을 &lt;/P&gt;&lt;P&gt;&amp;nbsp;표시할지 여부를 나타내&lt;/P&gt;&lt;P&gt;&amp;nbsp;는 부울 값.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;메서드&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;TABLE style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 450px; BORDER-BOTTOM: medium none; HEIGHT: 40px" cellSpacing=1 cellPadding=0 bgColor=#aaaaaa&gt;&lt;TBODY&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;Sprite()&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;Sprite 객체 생성&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&lt;P&gt;&amp;nbsp;startDrag&lt;/P&gt;&lt;P&gt;(lockCenter:&lt;FONT color=#38cc1a&gt;Boolean&lt;/FONT&gt; = false, bounds:&lt;FONT color=#4dbf00&gt;Rectangle&lt;/FONT&gt; = null):void&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P&gt;&amp;nbsp;지정된 Sprite를 드래그&lt;/P&gt;&lt;P&gt;&amp;nbsp;할 수 있도록 함. &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;stopDrag():void&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;starDrag() 메서드 종료.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;Sprite 클래스에는 위와 같은 속성과 메서드들이 있다. 이제 이것을 이용하여 예제를 만들어 보자. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-3116922988304074021?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/3116922988304074021/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/4sprite-%ED%81%B4%EB%9E%98%EC%8A%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/3116922988304074021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/3116922988304074021'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/4sprite-%ED%81%B4%EB%9E%98%EC%8A%A4.html' title='4.Sprite 클래스'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-766528157268296687</id><published>2010-03-22T02:07:00.000+09:00</published><updated>2011-01-29T19:56:34.913+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='액션스크립트 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='code templete'/><category scheme='http://www.blogger.com/atom/ns#' term='코드 템플릿'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript3.0'/><title type='text'>Actionscript 3.0 _ code templete(주석달기)</title><content type='html'>&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//&amp;nbsp; Import&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//&amp;nbsp; Constants&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//&amp;nbsp; Embeded Images&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;// &lt;br /&gt;&amp;nbsp;//&amp;nbsp; Constructor&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; Constructor &lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//&amp;nbsp; Variables&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//&amp;nbsp; Override Properties&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//&amp;nbsp; Properties&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//&amp;nbsp; Override Methods&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//&amp;nbsp; Methods : about ____________&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; *&amp;nbsp; funtion explain&lt;br /&gt;&amp;nbsp; * &lt;br /&gt;&amp;nbsp; *&amp;nbsp; @param parameter_name explain&lt;br /&gt;&amp;nbsp; *&amp;nbsp; &lt;br /&gt;&amp;nbsp; *&amp;nbsp; @return&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//&amp;nbsp; EventHandlers&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;//-------------------------------------------------&lt;br /&gt;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp; *&amp;nbsp; @private&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;}[/code]&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-766528157268296687?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/766528157268296687/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/actionscript-30-code-templete%EC%A3%BC%EC%84%9D%EB%8B%AC%EA%B8%B0.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/766528157268296687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/766528157268296687'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/actionscript-30-code-templete%EC%A3%BC%EC%84%9D%EB%8B%AC%EA%B8%B0.html' title='Actionscript 3.0 _ code templete(주석달기)'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-7954065688193664511</id><published>2010-03-20T16:13:00.000+09:00</published><updated>2011-01-29T19:56:34.829+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='오버라이딩'/><category scheme='http://www.blogger.com/atom/ns#' term='protected'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='클래스'/><category scheme='http://www.blogger.com/atom/ns#' term='접근제어자'/><category scheme='http://www.blogger.com/atom/ns#' term='메서드 재정의'/><category scheme='http://www.blogger.com/atom/ns#' term='public'/><category scheme='http://www.blogger.com/atom/ns#' term='private'/><title type='text'>접근제어자</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;접근제어자&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;접근제어자에는 public, private, protected가 있다. 어떤 제어 접근자를 쓰는가에 따라 클래스의 멤버에 접근할 수 있는 권한 틀려지기 때문에 잘 사용해야한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. public - 어디에서나 객체의 멤버 접근 가능.(아무런 제약 없이 접근 가능)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2. protected - 상속받은 클래스나 같은 패키지에 있는 클래스에서 접근 가능.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;3. private : 클래스의 외부에서 접근 불가능.(클래스 안에서만 사용 가능)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XGCbjbhRzW.jpg" style="width:299px;height:298px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;TABLE style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 450px; BORDER-BOTTOM: medium none; HEIGHT: 111px" cellSpacing=1 cellPadding=0 bgColor=#e0e0e0&gt;&lt;TBODY&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;public&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;protected &lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;private&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;상속&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;O&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;O&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;O&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;overriding&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;O&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;O&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;X&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;외부 클래스 접근&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;O&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;X&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width=135&gt;&lt;P align=center&gt;&lt;FONT face=verdana,arial,helvetica,sans-serif&gt;&amp;nbsp;X&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#338000&gt;overriding _메서드 오버라이딩(메서드 재정의) &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;클래스를 상속받아 사용할 때 public, protected로 선언된 멤버 변수나 메서드를 상속받아 사용할 수 있다. overriding은 상위 클래스의 메서드를 개선하거나 하위 클래스에 맞게 변경하여 사용할 수 있게 해주는 기능이다. &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-7954065688193664511?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/7954065688193664511/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%A0%91%EA%B7%BC%EC%A0%9C%EC%96%B4%EC%9E%90.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/7954065688193664511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/7954065688193664511'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%A0%91%EA%B7%BC%EC%A0%9C%EC%96%B4%EC%9E%90.html' title='접근제어자'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-4269017952965701158</id><published>2010-03-20T01:44:00.000+09:00</published><updated>2011-01-29T19:56:34.769+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='정보클래스'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='인터페이스'/><category scheme='http://www.blogger.com/atom/ns#' term='인터페이스 클래스'/><title type='text'>인터페이스 클래스</title><content type='html'>&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;인터페이스 클래스 &lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;인터페이스 클래스는 정보클래스라고도 한다. (인터페이스 = 정보)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;클래스 안에 메서드, 프로퍼티의 나열만 있고 실제로 뭔가를 만들지는 않는다.&lt;/P&gt;&lt;P&gt;즉, "뭘 만들겠다"고 지정만 해두는 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;실제로 구혈할 클래스에서 implements로 인터페이스 클래스를 지정해두면, 인터페이스 클래스에서 지정한 메서드를 구현하지 않으면 컴파일 단계에서 에러를 낸다.&lt;/P&gt;&lt;P&gt;(디버깅 횟수를 줄일 수 있다.)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;서로 다른 클래스 일지라도 같은 인터페잇 클래스로 구현해 놓으면 같은 데이터 형처럼 캐스팅해서 쓸 수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;좀더 자세한 내용을 알고 싶다면 &lt;A href="http://igna.textcube.com/21" target=_blank&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;야훔님&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/A&gt;블로그를 찾아가보자.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-4269017952965701158?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/4269017952965701158/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-%ED%81%B4%EB%9E%98%EC%8A%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4269017952965701158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4269017952965701158'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-%ED%81%B4%EB%9E%98%EC%8A%A4.html' title='인터페이스 클래스'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-5266034114424520205</id><published>2010-03-20T01:38:00.000+09:00</published><updated>2011-01-29T19:56:34.716+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='Array 배열'/><category scheme='http://www.blogger.com/atom/ns#' term='Vector 벡터'/><title type='text'>Vector 와 Array의 차이</title><content type='html'>&lt;P&gt;Array이는 C언어와 자료구조를 배우면서 많이 사용하였지만...Vector는 잘 모르겠다. java를 배우면서 Vector라는 말은 들어보았지만...배우지는 않았다. 그래서 인턴 면접을 봤을 때도 Vector에 대해 설명해 보라고 했을 때 아무말도 하지 못했다. 흠...슬프다. 하지만 이제 알았다. 하하하 이제라도 알았으니 다행이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;Array _배열&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- 어떤 객체도 다 들어감 &lt;/P&gt;&lt;P&gt;( 어떤 객체가 들어갈지 몰라 검사하는 과정에서 Vector랑 속도차이가 나서 더 느리다. )&lt;/P&gt;&lt;P&gt;- 많은 양의 데이터를 처리하는 경우 유용하게 사용할 수 있다. &lt;/P&gt;&lt;P&gt;- 참조값이라서 데이터 접근이 느리다.&lt;/P&gt;&lt;P&gt;- 각 값에 대해 메모리 주소값만 가지고 있다. &lt;/P&gt;&lt;P&gt;- 메모리 주소로 이동하고, 그 이동된 주소에서 해당 데이터가 맞는지 확인하고 난 뒤 값을 &amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 전달한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;var arr:Array = [];&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[]는 Array 객체를 의미한다. new Array()하는 것보다 []를 써주는 것이 속도가 빠르다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;Vector_벡터&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Vector 변수 선언할 때 어떤 객체가 들어갈지 미리 지정해 놓고 사용한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp; 즉, 자료형이 지정되어 있어 데이터의 접근이 빠르다.&lt;/P&gt;&lt;P&gt;- 연속성 데이터 즉, 메모리가 연속해서 배치되어 있다.&lt;/P&gt;&lt;P&gt;- 해당 값을 바로 찾는다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;var vec:Vector = new Vector.&amp;lt;Object&amp;gt;;&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이렇게 하면 모든 객체를 담을 수 있지만, Vector가 빨라질 수 있는 이유는 정해진 포맷을 미리 지정해 놨기 때문에 별도의 연산이 필요하지 않아서이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#338000&gt;#데이터 접근&amp;nbsp; : &amp;nbsp;Vector(빠르다) &amp;gt; Array(느리다)&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Vector는 Array이와는 달리 데이터형을 지정할 수 있어 데이터형에 따라 할당된 메모리 사이즈가 정해져 있기때문이다. (C에서는 데이터 사이즈를 제어할 수 있다. )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#338000&gt;#중간에 값을 삽입하여 넣을 때&amp;nbsp; : Vector(느리다) &amp;lt; Array(빠르다)&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Array이는 주소값만 바꿔주면 되지만, Vector는 메모리 값들을 죄다 쉬프트 해주고 공간을 마련해 놓고 데이터를 저장하기 때문이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#338000&gt;&lt;STRONG&gt;#Vector가 주로 쓰이는 경우&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Bitmap 데이터나 객체의 움직임을 제어할 때, 속도를 최적화 하려고 쓰인다.&lt;/P&gt;&lt;P&gt;- Bitmap 에서 하나의 픽셀에 4byte씩 할당.&lt;/P&gt;&lt;P&gt;- FF를 2진수로 바꾸면 8비트, 비트맵 데이터 = ARGB , 8*4 = 32 bit 할당 &lt;/P&gt;&lt;P&gt;- 이미지를 수정할 경우 Vector는 연속된 메모리의 정보를 가지고 있으므로 Vertor가 빠름.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-5266034114424520205?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/5266034114424520205/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/vector-%EC%99%80-array%EC%9D%98-%EC%B0%A8%EC%9D%B4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5266034114424520205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5266034114424520205'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/vector-%EC%99%80-array%EC%9D%98-%EC%B0%A8%EC%9D%B4.html' title='Vector 와 Array의 차이'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-7859831807166442391</id><published>2010-03-18T15:20:00.000+09:00</published><updated>2011-01-29T19:56:34.657+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='ColorTransform클래스'/><category scheme='http://www.blogger.com/atom/ns#' term='ColorTransform'/><title type='text'>(1) ColorTransform 예제</title><content type='html'>&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.geom.ColorTransform;&lt;br /&gt;import fl.events.SliderEvent;&lt;br /&gt;&lt;br /&gt;public class ColorTransformExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function ColorTransformExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&amp;nbsp; configure();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function configure():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; red.maximum = 10;&lt;br /&gt;&amp;nbsp; red.minimum = -10;&lt;br /&gt;&amp;nbsp; red.value = 10;&lt;br /&gt;&amp;nbsp; green.maximum = 10;&lt;br /&gt;&amp;nbsp; green.minimum = -10;&lt;br /&gt;&amp;nbsp; green.value = 10;&lt;br /&gt;&amp;nbsp; blue.maximum = 10;&lt;br /&gt;&amp;nbsp; blue.minimum = -10;&lt;br /&gt;&amp;nbsp; blue.value = 10;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; red.addEventListener(SliderEvent.THUMB_DRAG, changeColorHandler);&lt;br /&gt;&amp;nbsp; green.addEventListener(SliderEvent.THUMB_DRAG, changeColorHandler);&lt;br /&gt;&amp;nbsp; blue.addEventListener(SliderEvent.THUMB_DRAG, changeColorHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function changeColorHandler(event:SliderEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var ct:ColorTransform = pic.transform.colorTransform;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; ct.redMultiplier = red.value / 10;&lt;br /&gt;&amp;nbsp; ct.greenMultiplier = green.value / 10;&lt;br /&gt;&amp;nbsp; ct.blueMultiplier = blue.value / 10;&lt;br /&gt;&amp;nbsp; pic.transform.colorTransform = ct;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/Xf9Iyj3MLN.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/Xf9Iyj3MLN.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-7859831807166442391?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/7859831807166442391/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/1-colortransform-%EC%98%88%EC%A0%9C.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/7859831807166442391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/7859831807166442391'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/1-colortransform-%EC%98%88%EC%A0%9C.html' title='(1) ColorTransform 예제'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-7670035619384382655</id><published>2010-03-18T13:01:00.000+09:00</published><updated>2011-01-29T19:56:34.611+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='빛의 삼원색'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='rgb값'/><category scheme='http://www.blogger.com/atom/ns#' term='RGB'/><category scheme='http://www.blogger.com/atom/ns#' term='ColorTransform클래스'/><category scheme='http://www.blogger.com/atom/ns#' term='ColorTransform'/><title type='text'>3. ColorTransform 클래스</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;ColorTransform 클래스&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ColorTransform 클래스는 DisplayObject의 색상값을 조절할 수 있는 클래스로 Actionscriot로Advanced Effect 효과를 낼 수 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;아, 여기서 알아둬야 할것이 있는데 &lt;FONT color=#000000&gt;모든 &lt;FONT color=#ff6600&gt;UI객체&lt;/FONT&gt;는 &lt;FONT color=#ff6600&gt;ColorTransform 객체&lt;/FONT&gt;를 가지고 있다. &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;참고로 모니터는 빛의 삼원색으로 이해해야 한다. (빛의 삼원색 : 빨강, 초록, 파랑)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XeGnIXUh9U.jpg" style="width:366px;height:358px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;출처 : 네이버 백과사전 &lt;A href="http://100.naver.com/100.nhn?docid=839807"&gt;http://100.naver.com/100.nhn?docid=839807&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1px 은 &lt;FONT size=2&gt;&lt;FONT color=#000000&gt;AA&lt;FONT color=#ff0000&gt;RR&lt;/FONT&gt;&lt;FONT color=#338000&gt;GG&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#002fff&gt;BB&lt;/FONT&gt;&lt;/FONT&gt;로 표현되며 16진수로는&lt;FONT size=2&gt; 0x00&lt;FONT color=#ff0000&gt;00&lt;/FONT&gt;&lt;FONT color=#338000&gt;00&lt;/FONT&gt;&lt;FONT color=#002fff&gt;00&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(Alpha, Red, Green, Blue)&lt;/FONT&gt;&lt;FONT color=#000000&gt;로 나타낸다. 여기서 AA는 Alpha(투명도)를 말한다. Alpha는 주로 bitmap data에 사용되며 일반적으로 RRGGBB(0x000000)를 사용한다. &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;플래시는 각각의 색을 8bit로 할당한다. 24bit로 색상을 표현하므로 RGB는 24bit로 구성되어있으며, 만약 Alpha까지 포함한다면 32bit가 된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;RGB의 색상값은 255를 넘지 않는다. 왜냐하면 한 색상의 범위는 0~255이므로 한 색상은 8bit이고 이 색상이 표현할 수 있는 값은 2의 8승 즉, 256개의 색상을 가질 수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/7/70627/attach/XDPRMbi9pb.jpg" style="width:369px;height:306px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/7/70627/attach/XDPRMbi9pb.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;위와 같이 1장(1px)은 R, G, B가 층층이 쌓여 이루어졌다. 그렇기 때문에 RGB값을 이용하여 다양한 색상을 만들어 낼 수 있는 것이다. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이제 구조를 다 알았으니 예제를 하나 만들어보자. &amp;nbsp;플래시 파일에서 1개의 이미지 무비클립과 3개의 slider 컴포넌트를 이용하여 색상값을 조절하는 예제를 만들어보겠다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-7670035619384382655?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/7670035619384382655/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/3-colortransform-%ED%81%B4%EB%9E%98%EC%8A%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/7670035619384382655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/7670035619384382655'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/3-colortransform-%ED%81%B4%EB%9E%98%EC%8A%A4.html' title='3. ColorTransform 클래스'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-2416702038180112046</id><published>2010-03-18T02:20:00.000+09:00</published><updated>2011-01-29T19:56:34.561+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='display.Sprite'/><category scheme='http://www.blogger.com/atom/ns#' term='Rectangle'/><title type='text'>2. Rectangle 클래스</title><content type='html'>&lt;P&gt;&lt;FONT color=#ff6600&gt;&lt;STRONG&gt;Rectangle 클래스&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#000000&gt;Rectangle 은 직사각형이라는 뜻이다. 그럼 Rectangle 클래스는 사각형을 만들기위한 기능을 가진 클래스라는 것이군. 그럼 Rectangle 클래스를 이용하여 사각형을 만들어보자. &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.geom.Rectangle;&lt;br /&gt;&lt;br /&gt;public class Rectangle extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function Rectangle()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var rx:Number = 0;&lt;br /&gt;&amp;nbsp; var ry:Number = 0;&lt;br /&gt;&amp;nbsp; var rw:Number = 100;&lt;br /&gt;&amp;nbsp; var rh:Number = 50;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; var rect:Rectangle = new Rectangle(rx, ry, rw, rh);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이렇게 하면 내부적으로 사각형을 생성하기만 할 뿐 화면에 나타나지는 않는다. 화면에 사각형을 그리려면 Graphics 클래스의 drawRect() 메서드를 사용해야한다. &lt;/P&gt;&lt;P&gt;그럼 drawRect() 메서드를 이용하여 사각형을 그려보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.display.Graphics;&lt;br /&gt;&lt;br /&gt;public class Rectangle extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function Rectangle()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&amp;nbsp; drawRect();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function drawRect():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; var g:Graphics = this.graphics;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; g.clear();&lt;br /&gt;&amp;nbsp; g.beginFill(0xFF0000, 1);&lt;br /&gt;&amp;nbsp; g.drawRect(0, 0, 100, 100);&lt;br /&gt;&amp;nbsp; g.endFill();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="294" width="404" data="http://ss.textcube.com/blog/7/70627/attach/XRKzzMne4K.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XRKzzMne4K.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;빨간색 사각형이 생겼다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;아, 플래시에서 사용하는 좌표는 상단 왼쪽 끝이 (0, 0)이 된다. 상단 왼쪽 끝에서 오른쪽으로 갈수록, 상단 왼쪽에서 하단 아래로 내려갈수록 양의 값을 갖는다. &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-2416702038180112046?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/2416702038180112046/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/2-rectangle-%ED%81%B4%EB%9E%98%EC%8A%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2416702038180112046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2416702038180112046'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/2-rectangle-%ED%81%B4%EB%9E%98%EC%8A%A4.html' title='2. Rectangle 클래스'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-8511213277228596815</id><published>2010-03-17T02:35:00.000+09:00</published><updated>2011-01-29T19:56:34.494+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='point.polar'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='polar'/><title type='text'>(4) 극 좌표를 직교 좌표계의 한 점으로 변환 - Point.polar()</title><content type='html'>&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.display.MovieClip;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.geom.Point;&lt;br /&gt;&lt;br /&gt;public class DistanceExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function DistanceExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&amp;nbsp; configureListener();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private var circle1:Circle;&lt;br /&gt;&amp;nbsp;private var circle2:Circle;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function configureListener():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(!circle1)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle1 = new Circle();&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle1.x = 100;&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle1.y = 100;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(circle1);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(!circle2)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle2 = new Circle();&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle2.x = 200;&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle2.y = 200;&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(circle2);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; circle1.addEventListener(MouseEvent.MOUSE_DOWN, circle1DownHandler);&lt;br /&gt;&amp;nbsp; circle1.addEventListener(MouseEvent.MOUSE_UP, circle1UpHandler);&lt;br /&gt;&amp;nbsp; circle2.addEventListener(MouseEvent.MOUSE_DOWN, circle2DownHandler);&lt;br /&gt;&amp;nbsp; circle2.addEventListener(MouseEvent.MOUSE_UP, circle2UpHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle1DownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle1.startDrag(false, null);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle1UpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle1.stopDrag();&lt;br /&gt;&amp;nbsp; var point1:Point = new Point(circle1.x, circle1.y);&lt;br /&gt;&amp;nbsp; var point2:Point = new Point(circle2.x, circle2.y);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; distance_txt.text = Point.distance(point1, point2).toString();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle2DownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle2.startDrag(false, null);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle2UpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle2.stopDrag();&lt;br /&gt;&amp;nbsp; var point1:Point = new Point(circle1.x, circle1.y);&lt;br /&gt;&amp;nbsp; var point2:Point = new Point(circle2.x, circle2.y);&lt;br /&gt;&amp;nbsp; distance_txt.text = Point.distance(point1, point2).toString();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XVxTpC1q5u.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XVxTpC1q5u.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-8511213277228596815?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/8511213277228596815/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/4-%EA%B7%B9-%EC%A2%8C%ED%91%9C%EB%A5%BC-%EC%A7%81%EA%B5%90-%EC%A2%8C%ED%91%9C%EA%B3%84%EC%9D%98-%ED%95%9C-%EC%A0%90%EC%9C%BC%EB%A1%9C-%EB%B3%80%ED%99%98-pointpolar.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8511213277228596815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/8511213277228596815'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/4-%EA%B7%B9-%EC%A2%8C%ED%91%9C%EB%A5%BC-%EC%A7%81%EA%B5%90-%EC%A2%8C%ED%91%9C%EA%B3%84%EC%9D%98-%ED%95%9C-%EC%A0%90%EC%9C%BC%EB%A1%9C-%EB%B3%80%ED%99%98-pointpolar.html' title='(4) 극 좌표를 직교 좌표계의 한 점으로 변환 - Point.polar()'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-5849829307478498065</id><published>2010-03-17T02:32:00.000+09:00</published><updated>2011-01-29T19:56:34.415+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interpolate'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='point 클래스'/><category scheme='http://www.blogger.com/atom/ns#' term='point.interpolate'/><title type='text'>(3) 두 점 사이의 일정한 비율의 위치 - Point.interpolate()</title><content type='html'>&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.display.MovieClip;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.geom.Point;&lt;br /&gt;public class DistanceExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function DistanceExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&amp;nbsp; configureListener();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private var circle1:Circle;&lt;br /&gt;&amp;nbsp;private var circle2:Circle;&lt;br /&gt;&amp;nbsp;public function configureListener():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(!circle1)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle1 = new Circle();&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle1.x = 100;&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle1.y = 100;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(circle1);&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(!circle2)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle2 = new Circle();&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle2.x = 200;&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle2.y = 200;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(circle2);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; circle1.addEventListener(MouseEvent.MOUSE_DOWN, circle1DownHandler);&lt;br /&gt;circle1.addEventListener(MouseEvent.MOUSE_UP, circle1UpHandler);&lt;br /&gt;circle2.addEventListener(MouseEvent.MOUSE_DOWN, circle2DownHandler);&lt;br /&gt;circle2.addEventListener(MouseEvent.MOUSE_UP, circle2UpHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle1DownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle1.startDrag(false, null);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle1UpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle1.stopDrag();&lt;br /&gt;&amp;nbsp; var point1:Point = new Point(circle1.x, circle1.y);&lt;br /&gt;&amp;nbsp; var point2:Point = new Point(circle2.x, circle2.y);&lt;br /&gt;&amp;nbsp; distance_txt.text = Point.distance(point1, point2).toString();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle2DownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle2.startDrag(false, null);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle2UpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle2.stopDrag();&lt;br /&gt;&amp;nbsp; var point1:Point = new Point(circle1.x, circle1.y);&lt;br /&gt;&amp;nbsp; var point2:Point = new Point(circle2.x, circle2.y);&lt;br /&gt;&amp;nbsp; distance_txt.text = Point.distance(point1, point2).toString();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XBNRccjb1K.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XBNRccjb1K.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-5849829307478498065?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/5849829307478498065/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/3-%EB%91%90-%EC%A0%90-%EC%82%AC%EC%9D%B4%EC%9D%98-%EC%9D%BC%EC%A0%95%ED%95%9C-%EB%B9%84%EC%9C%A8%EC%9D%98-%EC%9C%84%EC%B9%98-pointinterpolate.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5849829307478498065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/5849829307478498065'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/3-%EB%91%90-%EC%A0%90-%EC%82%AC%EC%9D%B4%EC%9D%98-%EC%9D%BC%EC%A0%95%ED%95%9C-%EB%B9%84%EC%9C%A8%EC%9D%98-%EC%9C%84%EC%B9%98-pointinterpolate.html' title='(3) 두 점 사이의 일정한 비율의 위치 - Point.interpolate()'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-6996458407049704599</id><published>2010-03-17T02:25:00.000+09:00</published><updated>2011-01-29T19:56:34.357+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='Point'/><category scheme='http://www.blogger.com/atom/ns#' term='point 클래스'/><category scheme='http://www.blogger.com/atom/ns#' term='Point.distance'/><title type='text'>(2) 두 점 사이의 거리 - Point - distance()</title><content type='html'>&lt;P&gt;[code as3]&lt;br /&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.display.MovieClip;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.geom.Point;&lt;br /&gt;&lt;br /&gt;public class DistanceExample extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function DistanceExample()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&amp;nbsp; configureListener();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private var circle1:Circle;&lt;br /&gt;&amp;nbsp;private var circle2:Circle;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function configureListener():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(!circle1)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle1 = new Circle();&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle1.x = 100;&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle1.y = 100;&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(circle1);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if(!circle2)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle2 = new Circle();&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle2.x = 200;&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle2.y = 200;&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(circle2);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; circle1.addEventListener(MouseEvent.MOUSE_DOWN, circle1DownHandler);&lt;br /&gt;circle1.addEventListener(MouseEvent.MOUSE_UP, circle1UpHandler);&lt;br /&gt;circle2.addEventListener(MouseEvent.MOUSE_DOWN, circle2DownHandler);&lt;br /&gt;circle2.addEventListener(MouseEvent.MOUSE_UP, circle2UpHandler);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle1DownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle1.startDrag(false, null);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle1UpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle1.stopDrag();&lt;br /&gt;&amp;nbsp; var point1:Point = new Point(circle1.x, circle1.y);&lt;br /&gt;&amp;nbsp; var point2:Point = new Point(circle2.x, circle2.y);&lt;br /&gt;&amp;nbsp; distance_txt.text = Point.distance(point1, point2).toString();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle2DownHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle2.startDrag(false, null);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function circle2UpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle2.stopDrag();&lt;br /&gt;&amp;nbsp; var point1:Point = new Point(circle1.x, circle1.y);&lt;br /&gt;&amp;nbsp; var point2:Point = new Point(circle2.x, circle2.y);&lt;br /&gt;&amp;nbsp; distance_txt.text = Point.distance(point1, point2).toString();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XWKAJCQw8u.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XWKAJCQw8u.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-6996458407049704599?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/6996458407049704599/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/2-%EB%91%90-%EC%A0%90-%EC%82%AC%EC%9D%B4%EC%9D%98-%EA%B1%B0%EB%A6%AC-point-distance.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6996458407049704599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6996458407049704599'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/2-%EB%91%90-%EC%A0%90-%EC%82%AC%EC%9D%B4%EC%9D%98-%EA%B1%B0%EB%A6%AC-point-distance.html' title='(2) 두 점 사이의 거리 - Point - distance()'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-83706612675621501</id><published>2010-03-17T01:29:00.000+09:00</published><updated>2011-01-29T19:56:34.265+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='Point'/><category scheme='http://www.blogger.com/atom/ns#' term='Point_length'/><category scheme='http://www.blogger.com/atom/ns#' term='point 클래스'/><title type='text'>(1) (0, 0)에서 한 점까지의 거리 - length</title><content type='html'>&lt;P&gt;[code as3]&lt;br /&gt;package &lt;br /&gt;{&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.display.MovieClip;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.geom.Point;&lt;br /&gt;&lt;br /&gt;public class Length extends Sprite&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public function Length()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; super();&lt;br /&gt;&amp;nbsp; configureListener();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;private var circle:Circle;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public function configureListener():void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(!circle)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle = new Circle();&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle.x = stage.stageWidth / 2;&lt;br /&gt;&amp;nbsp; &amp;nbsp;circle.y = stage.stageHeight / 2;&lt;br /&gt;&amp;nbsp; &amp;nbsp;addChild(circle);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; circle.addEventListener(MouseEvent.MOUSE_DOWN, ptMouseDownHaldner);&lt;br /&gt;&amp;nbsp; circle.addEventListener(MouseEvent.MOUSE_UP, ptMouseUpHandler);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;function ptMouseDownHaldner(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle.startDrag(false, null);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;function ptMouseUpHandler(event:MouseEvent):void&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; circle.stopDrag();&lt;br /&gt;&amp;nbsp; var point1:Point = new Point(circle.x, circle.y);&lt;br /&gt;&amp;nbsp; length_txt.text = point1.length.toString();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/7/70627/attach/XG3Gp0XMbE.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XG3Gp0XMbE.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-83706612675621501?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/83706612675621501/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/1-0-0%EC%97%90%EC%84%9C-%ED%95%9C-%EC%A0%90%EA%B9%8C%EC%A7%80%EC%9D%98-%EA%B1%B0%EB%A6%AC-length.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/83706612675621501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/83706612675621501'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/1-0-0%EC%97%90%EC%84%9C-%ED%95%9C-%EC%A0%90%EA%B9%8C%EC%A7%80%EC%9D%98-%EA%B1%B0%EB%A6%AC-length.html' title='(1) (0, 0)에서 한 점까지의 거리 - length'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-4553864813852146060</id><published>2010-03-15T16:12:00.000+09:00</published><updated>2011-01-29T19:56:34.217+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Point 클래스 정의'/><category scheme='http://www.blogger.com/atom/ns#' term='Point 클래스 메서드'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0 API'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='Point 클래스 속성'/><title type='text'>1. Point 클래스</title><content type='html'>&lt;P&gt;&lt;STRONG&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#ff6600&gt;Point 클래스&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Point 클래스는 점, 사각형 등 기하학적 객체를 정의하는 클래스들 중 하나로 직교 좌표계의 한 점을 가지는 클래라고 한다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;음...무슨 소린진 잘 모르겠다.&amp;nbsp; 일단 Point 클래스의 속성과 메서드를 살펴보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;Point 클래스 속성과 메서드&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;속성&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;TABLE style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 515px; BORDER-BOTTOM: medium none; HEIGHT: 66px" cellSpacing=1 cellPadding=0 bgColor=#aaaaaa&gt;&lt;TBODY&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial Unicode MS; mso-fareast-font-family: Arial Unicode MS; mso-hansi-font-family: Arial Unicode MS"&gt;length : Number [read-only]&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;(0, 0)에서 한 점까지 길이&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial Unicode MS; mso-fareast-font-family: Arial Unicode MS; mso-hansi-font-family: Arial Unicode MS"&gt;x : Number&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;x좌표 값&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial Unicode MS; mso-fareast-font-family: Arial Unicode MS; mso-hansi-font-family: Arial Unicode MS"&gt;y : Number&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;y좌표 값&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT color=#ff6600&gt;메서드&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;!--StartFragment--&gt;&lt;P class=바탕글&gt;&lt;TABLE style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 507px; BORDER-BOTTOM: medium none; HEIGHT: 335px" cellSpacing=1 cellPadding=0 bgColor=#aaaaaa&gt;&lt;TBODY&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;Point(x:Number=0, y:Number=0)&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;새로운 점 만듬&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;add(v:Point):Point&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;좌표값을 추가하여 새로운 점 만듬&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;clone():Number&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;Point 객체 복사본 만듬&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;distance(pt1:Point, pt2:Point):Number)&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;두 점 사이의 거리&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;equals(toCompare:Point)&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;두 점이 같은지 결정&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;interpolate(pt1:Point, pt2:Point, f:Number):Point&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;두 점 사이에서 원하는 비율을 설정하면 계산된 점을 Point 객체로 반환&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;normarlize(thickness:Number):void&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;좌표를 (0,0)기준으로 설정된 거리로 조절&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;offset(dx:Number, dy:Number):void&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;현 Point 객체를 지정된 만큼 이동&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;polar(len:Number, angle:Number):Point&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;지정된 거리와 각도에 위치된 좌표를 반환&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;subtract(v:Point):Point&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;현재 점에서 다른 점의 좌표를 빼서 새 점 만듬&lt;/TD&gt;&lt;/TR&gt;&lt;TR bgColor=#ffffff&gt;&lt;TD width=135&gt;&amp;nbsp;toString():String&lt;/TD&gt;&lt;TD width=135&gt;&amp;nbsp;x , y 값 문자열로 반환&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;이제 속성과 메서드도 알아봤으니 하나씩 만들어 보겠다. 음, 다 만들 수는 없고 속성에서 length와 메서드에서 distance, interpolate, polar 정도만 만들어보겠다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-4553864813852146060?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/4553864813852146060/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/1-point-%ED%81%B4%EB%9E%98%EC%8A%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4553864813852146060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/4553864813852146060'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/03/1-point-%ED%81%B4%EB%9E%98%EC%8A%A4.html' title='1. Point 클래스'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-6448492110870948348</id><published>2010-02-24T16:27:00.000+09:00</published><updated>2011-01-29T19:56:34.115+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionSript3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenAPI'/><title type='text'>Daum_Open_API Dictionary Search</title><content type='html'>&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="600" width="500" data="http://ss.textcube.com/blog/7/70627/attach/XONCa015Qc.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XONCa015Qc.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-6448492110870948348?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/6448492110870948348/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/02/daumopenapi-dictionary-search.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6448492110870948348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/6448492110870948348'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/02/daumopenapi-dictionary-search.html' title='Daum_Open_API Dictionary Search'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7392872561481346708.post-2359674078196402360</id><published>2010-02-24T16:18:00.000+09:00</published><updated>2011-01-29T19:56:34.052+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='NaverOpenAPI'/><title type='text'>Naver_Open_API를 이용한 쇼핑 검색</title><content type='html'>&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="600" width="500" data="http://ss.textcube.com/blog/7/70627/attach/XUJIkLUV0h.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/7/70627/attach/XUJIkLUV0h.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7392872561481346708-2359674078196402360?l=butibutiuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://butibutiuk.blogspot.com/feeds/2359674078196402360/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://butibutiuk.blogspot.com/2010/02/naveropenapi%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%87%BC%ED%95%91-%EA%B2%80%EC%83%89.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2359674078196402360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7392872561481346708/posts/default/2359674078196402360'/><link rel='alternate' type='text/html' href='http://butibutiuk.blogspot.com/2010/02/naveropenapi%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%87%BC%ED%95%91-%EA%B2%80%EC%83%89.html' title='Naver_Open_API를 이용한 쇼핑 검색'/><author><name>butibutiuk</name><uri>http://www.blogger.com/profile/18354917418445728715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
