플래시 MX 통신

DEV_FLASH 2008. 2. 28. 17:36 |
플래시 MX 통신
플래시 MX는 다양한 통신 방법을 제공한다. 플래시에서의 통신 범위와 통신에 사용되는 함수들을 정리해보면 다음과 같다.

 <표 1> 플래시용 통신 범주와 함수  

통신 범주

사용되는 함수, 객체

플래시와 자바 스크립트 통신

getURL(), fscommand()

플래시와 웹 서버간 HTTP 통신

loadVariables(), loadVariablesNum()
 getURL()
loadVars 객체

플래시와 플래시 간

getURL(), fscommand() (SWFJavaScript SWF)
LocalConnection 객체    

플래시와 XML 웹 서비스, MX 리모팅

XML 객체
NetServices, NetConnection 객체




getURL()은 예전부터 사용되던 함수인데 주로 페이지를 이동하는데 사용됐지만 자바 스크립트를 호출하는데도 사용될 수 있다. loadVariables()는 외부로부터 데이터를 읽어내는 함수이다. getURL()과 마찬가지로 URL을 지정하고 여기 “이름=값” 쌍을 읽어내어 플래시 변수(variable)에 할당한다. 만일 URL에 파일명을 지정하면(“a.txt”), SWF이 다운로드 된 URL과 같은 위치에 있는 파일로부터 읽어 들인다. LoadVars.load()는 MX에 새로 추가된 기능이다. loadVariables()를 이용하는 것보다 간편하며 비동기로 동작하기 때문에 데이터를 읽어오는 동안 ‘로딩중입니다’를 표시하는 것 같이 다른 동작을 하는 것을 손쉽게 구현할 수 있다.

XML 객체 역시 LoadVars와 사용하는 방법이 거의 같다. 다른 점은 XML 문서를 가져와서 파싱을 한다는 점이다. 플래시 MX에서는 XML DOM을 다루는 메쏘드들이 제공된다. XML을 이용하면 잘 구조화된 데이터를 처리할 수 있다는 장점이 있으며, 훨씬 유연한 애플리케이션을 제작할 수 있다. 실제로 애니메이션 방법을 XML로 기술해 SWF 파일은 하나인데 상황에 따라 다른 애니메이션을 보여주는 방법도 사용할 수 있다.

<표 2> “commnad”의 기본 명령

 

"allowscale", true/false

 화면 크기에 따라갈 것인지 지정  

"showmenu", true/false

플래시 메뉴를 보일 것인지 지정  

"exec", "path\\a.exe"

외부 프로그램 수행

"quit"  

플레이어 종료  




fscommand를 사용하는 예를 살펴보자. 다음과 같은 액션 스크립트가 있다면, “close”를 인자로 넘겨 자바 스크립트를 호출한다.

fscommand ("close");

브라우저 스크립트에서 인자를 받아 수행된다. 브라우저의 fs_DoFSCommand() 스크립트가 호출된다. 다음에 나오는 소스 코드는 자동으로 생성된 FSCommand 템플릿(HTML 파일)의 스크립트를 수정한 것이다. 전달받은 command, args에 따라 적절한 작업을 하도록 자바 스크립트를 수정하면 된다.

function fs_DoFSCommand(command, args) {
var fsObj = InternetExplorer ? fs : document.fs;
//
// Place your code here...
//
if(command = "close") {
window.self.close();
}
}

자바 스크립트에서 플래시로 값을 전달
플래시에 특정한 값을 전달하려면 플래시 플레이어 <OBJECT>의 ID를 이용하고 SetVariable() 함수를 이용한다. 이 함수는 SWF의 변수에 지정된 값을 셋팅하는 함수로 플레이어가 제공한다.

<화면 5> JsToFlash 수행 결과

<화면 5>는 이 페이지를 수행한 결과이다. HTML 페이지에 입력된 값을 SWF로 전달해 입력된 문자열이 그대로 SWF에 표시되는 것을 확인할 수 있다.

movie.SetVariable("inputText", form1.inputVal.value) ;

SWF에 있는 텍스트박스의 변수명(vars)가 “inputText”이다. form1에 있는 값을 SWF가 가지고 있는 “inputText” 변수에 할당하는 것이다.

<HTML>
<HEAD>
<meta http-equiv=Content-Type content="text/html;  charset=">
<TITLE>JsToFlash</TITLE>
 
<SCRIPT LANGUAGE="JavaScript">
<!--
function SetFlashVariable() {
var movie = window.document.JsToFlash;
movie.SetVariable("inputText", form1.inputVal.value) ;
}
//-->
</SCRIPT>
 
</HEAD>
<BODY bgcolor="#999999">
<!-- URL's used in the movie-->
<!-- text used in the movie-->
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
WIDTH="300" HEIGHT="100" id="JsToFlash" ALIGN="">
<PARAM NAME=movie VALUE="JsToFlash.swf">
<EMBED autostart=true src="JsToFlash.swf" WIDTH="300" HEIGHT="200"
NAME="JsToFlash" ALIGN=""
</EMBED>
</OBJECT>
<br/>
<form id="form1">
<input name="inputVal" type ="input" value="여기에
입력하세요"><br/>
<input type ="button" value="플래시에설정" onClick="SetFlashVariable
()">
</form>
 
</BODY>
</HTML>

플래시와 플래시간 통신
하나의 페이지에 두 개 이상의 플래시가 있고 이들 사이에 통신을 하려면 어떻게 할까? 플래시 MX 이전에는 SWF간에 통신을 하기 위해 앞서 살펴본 자바 스크립트를 중간에 이용해야 했다. 즉, SWF 자바 스크립트 SWF 이런 방법을 사용했다. 이 방법은 브라우저에 의존하는 면이 강해서 익스플로러나 넷스케이프에 따라 다르게 처리를 해줘야 하므로 매우 불편했다.

플래시 MX에서는 SWF간 통신을 지원하기 위해 LocalConnection라는 객체를 제공한다. 같은 브라우저 내에서는 간편하게 SWF간에 통신을 할 수 있다. 여러 개의 윈도우를 가진 플래시 컨텐츠를 비교적 간단하게 만들 수 있다. 예를 들어, 메뉴를 담고 있는 SWF과 내용을 보여주는 SWF를 따로 제작해 훨씬 유연한 컨텐츠를 제작할 수 있을 것이다. 간단히 사용법을 살펴보자. 먼저 명령을 수신하는 쪽은 다음과 같이 작성한다.

// LocalConnection 객체를 생성
lcObj = new LocalConnection();

// 객체에 onContentSelect 메쏘드를 정의
lcObj.onContentSelect = function(num) {
// num 값에 따라 처리
}
// lcObj를 오브젝트를 아이디로 "contents"를 지정
lcObj.connect("contents");

상대편, 즉 명령을 보내는 쪽은 다음과 같이 작성한다.

lcObj = new LocalConnection();

// 메뉴 선택시 "contents"로 전송하는 데이터 정의
_root.menu1.onRelease = function() {
lcObj.send("contents", "onContentSelect", 100);
}

_root.menu2.onRelease = function() {
lcObj.send("contents", "onContentSelect", 200);
}

이처럼 LocalConnection을 사용하면 자바 스크립트를 작성하지 않고도 훨씬 간편하게 SWF간에 데이터를 송수신 할 수 있다.

플래시 HTTP 통신
getURL()은 특정 URL을 호출하는 기능을 가지고 있다. 따라서 URL을 다음과 같이 지정한다면 특정 URL에 값을 전달하도록 할 수 있다. 예를 들어, SWF에서 입력받은 결과를 특정 페이지에 다음과 같이 전달할 수 있다.

getURL( 'http://localhost/memo.aspx?n="홍길동"')

getURL()보다 훨씬 다양하게 사용될 수 있는 것이 loadVariables() 함수이다. 이 함수는 URL에서 값들을 읽어 올 수 있다. URL은 파일일 수도 있고 http로 시작하는 페이지일 수도 있다. loadVariables()는 다음과 같은 형태로 사용한다.

loadVariables ("url" , level/"target"[, variables])
loadVariablesNum ("url" ,level [, variables])

만약에 loadVariables()가 “이름1=값1&이름2=값2&이름3&값3”과 같은 값을 수신했다면, SWF 내의 변수 중에서 “이름1”에 “값1”을 할당하게 된다. 여러 개의 값을 한꺼번에 지정할 때 각기 다른 이름을 줘야하므로 보통 변수명에 번호를 붙여서 사용한다.

◆ loadVariablesNum 샘플
on(release) {
loadVariablesNum("phonebook.txt", 0);
loadVariablesNum("data.txt", 0);
}

◆ phonebook.txt의 내용
name=홍길동&phone=013-443-2331

◆ data.txt의 내용
memo=안녕하세요? 길동님.. 메모를 남깁니다.

여기서는 phonebook.txt와 data.txt 파일에서 값들을 읽어서 변수에 할당하는 예이다. SWF에는 name, phone, memo를 변수 이름으로 가지는 객체가 각각 있다.

phonebook.txt, data.txt와 작성된 html, swf 파일을 같은 폴더에 웹 서버에 올려놓고 테스트를 해 보라. 수정해야 할 것은 전혀 없다. 즉, 로컬에서 수행되는 것과 마찬가지로 웹상에서도 똑같이 수행된다. 물론 다음과 같이 특정 URL을 지정할 수 도 있겠지만, 파일명만 지정하면 기본적으로 SWF가 다운로드된 URL과 같은 위치를 요청하게 된다.

loadVariablesNum("http://localhost/test/phonebook.txt", 0);

이제 ASP.NET 페이지에 데이터를 보내고 보낸 내용에 따라 다르게 반응하는 예제를 만들어 보자.

<화면 6> 예제 06-loadVariables2 수행 결과

<화면 6>과 같이 화면을 구성하고, 메모로 되어 있는 회색 영역의 변수 이름은(vars)는 “memo”로 되어 있다. GET 버튼에는 다음과 같은 액션 스크립트가 작성되어 있다. 이 내용은 localhost의 test 폴더에 memo.aspx를 호출하는 내용이다.

on(release) {
loadVariablesNum("http://localhost/test/memo.aspx?name=" + name, 0);
}

서버측의 페이지는 아주 간단한 ASPX 페이지로, “홍길동”이 인자로 전달되면, “memo=홍길동님 12시까지 오세요”란 문자열이 리턴되고 아닌 경우는 “memo= 메모가 없읍니다”가 리턴된다(<리스트 1>).


<리스트 1> memo aspx


여기서 한 가지 주의할 것이 있다. 앞서 이야기한대로 System.useCodepage = true로 하고 <리스트 1>의 memo.aspx 파일이 있는 곳에 web.config를 다음과 같이 수정한다. 요청(request) 인코딩과 응답(response) 인코딩을 다음과 같이 모두 “ecu-kr”로 맞춰준다. 이렇게 하는 것이 테스트하기도 좋고, 실제 대부분의 사이트들이 EUC-KR(KSC5601)을 사용하기 때문에 글자가 깨지는 문제를 일으키지 않는다.

◆ web.config 파일의 일부
<globalization
   requestEncoding="euc-kr"
   responseEncoding="euc-kr"
/>

loadVariables는 배경색과 같은 SWF의 설정 등을 읽어오는데도 사용할 수 있다. 가능한 데이터를 SWF 안에 두지 말고 파일이나 혹은 특정 URL(apsx 페이지)에서 생성된 데이터를 읽어 들여 처리하는 것이 훨씬 좋다. 내용이 변경되어도 SWF를 다시 제작하는 수고를 덜어 줄 것이기 때문이다. 훨씬 더 유연하고 동적인 SWF를 구성할 수 있다.

LoadVars 객체
LoadVars 객체는 앞서 이야기한 loadVariables()를 대신해 사용할 수 있으며, 훨씬 다양한 기능을 제공한다. 특히 다양한 데이터를 읽어 들어 처리할 때 매우 유용하다. loadVars()는 다음과 같이 객체를 생성하여 사용한다.

lv = new loadVars();

loadVars 객체는 다음과 같이 다양한 메쏘드와 속성을 제공한다(<표 3>).

 <표 3> loadVars 메쏘드와 속성  

메쏘드

load()

지정된 URL에서 변수를 가져온다

getBytesTotal()

load()/sendAndLoad()에서 로드한 바이트 수를 리턴

send()

변수를 지정된 URL로 전송        

sendAndLoad()

변수를 지정된 URL로 전송하고 응답을 수신

toString()

열거 가능한 변수를 포함하는 URL 문자열을 반환

속성

contentType

데이터의 MIME 타입

loaded

sendAndLoad()가 완료되었는지 여부

이벤트

onLoad

load(), sendAndLoad()가 완료되었을 때 발생

onData

onLoad와 비슷(raw 데이터 처리)




<리스트 2>는 액션 스크립트 예제이다. 액션 스크립트의 Array를 이용했고 onLoad를 이용해 load가 다 끝난 뒤에 데이터를 처리하도록 했다. 데이터가 로드되면 loaded가 함수가 수행된다.


<리스트 2> 주소록 액션 스크립트


<리스트 3>는 이전(prev) 버튼을 눌렀을 때 동작하는 액션 스크립트이다. <리스트 4>는 서버측 ASPX 페이지이며, 여기서 이 페이지에서 데이터를 보기 좋게 하기 위해 ‘&’ 문자를 두 번에 나눠 쓴 것을 눈여겨보자. ‘&’을 연속해서 사용해 개행 문자 사이를 이어 줄 수 있다.


<리스트 3> Prev 버튼에 대한 이벤트 핸들러



<리스트 4> addressbook.aspx


<화면 7>은 이 주소록의 수행되는 화면이다. 총 4개의 주소를 ASPX 페이지로부터 로드하여 이전 이후를 볼 수 있도록 되어 있다. 서버측이 무척 간단하게 되어 있지만 요청을 받았을 때 이 내용을 데이터베이스에서 읽어오도록 할 수도 있을 것이다. 결과적으로 플래스 MX가 HTTP 통신을 위해 다양한 방법들이 제공되지만 LoadVars 객체를 이용하는 것이 가장 유연하고 좋은 방법이다.

<화면 7> loadVars 예제 수행결과

플래시의 경쟁자들
SVG 포맷은 벡터그래픽을 위한 표준 XML 문서로 1998년 어도비, 썬마이크로시스템즈, 넷스케이프가 제안한 PGML(Precisson Graphics Markup Language)과 매크로미디어와 마이크로소프트가 제안한 VML(Vector Markup Language)을 기반으로 만들어졌다. SVG는 W3C의 표준 권고안으로 채택되어 어도비를 포함하여 여러 회사에서 지원하고 있다.

플래시의 SWF 파일 포맷은 공개되어 있지만 FLA 파일 포맷은 공개되어 있지 않다. 반면 SVG는 오픈 표준으로 순수하게 XML로만 제작이 가능하다는 장점 때문에 오픈 진영에서도 다양한 도구들이 많이 만들어 지고 있다. 반면에 플래시는 이미 광범위하게 사용되고 있어 SVG와 플래시가 향후 어떻게 발전할지 그 귀추가 주목된다.

사실상 플래시는 클라이언트 환경에서 자바 애플릿을 제치고 좀더 다양한 기능을 제공하고 있다(이 배경에는 마이크로소프트가 JVM을 더 이상 지원하지 않는 이유도 크게 작용했다). 플래시는 자바 애플릿과 달리 프로그래밍 도구가 아닌 디자인 도구에서 출발했다는 점이 풍부하고 다양한 컨텐츠를 가능하게 했고, 이 때문에 플래시가 더욱 많이 사용되게 됐다. 아직 CLR이 설치된 클라이언트가 그리 많지는 않지만 장기적으로 볼 때, 닷넷의 XML 웹 서비스, 리모팅 기술을 포함한 스마트 클라이언트 기술도 플래시의 경쟁 기술 중의 하나가 될 수 있다.

이제 플래시 MX는 개발 도구로서의 면모를 갖추기 시작했고, 기업 환경에 적용될 채비를 모두 갖추었다. 닷넷이나 웹 서비스 등의 분야들과 마찬가지로 플래시 또한 하나의 새로운 개발 영역이 되었으며 사용상의 편의와 풍부한 인터페이스를 기반으로 계속 확장될 것이다.

이번 글에서는 플래시 MX의 다양한 통신 방법과 기본적인 HTTP 통신에 대해 살펴봤다. 예제들을 실행해 FLA 파일을 살펴보면 충분히 소화할 수 있을 것이다. 플래시를 처음 접하는 독자라면 인터넷에 많은 플래시 강좌들이 있으니 이들을 먼저 접해보기 바란다. 다음에는 플래시에서 XML 문서를 다루는 방법들과 XML 웹 서비스 그리고 리모팅에 대한 주제를 다뤄 본다. @

Posted by 으니가저아
:

플래시에서 텍스트필드는 세가지로 나누죠.  static,Dynamic, input ...


이중에서 static 의 경우는 퍼블리싱할때 입력된 텍스트를 쉐이프로 변환되서 들어갑니다. 즉 폰트의 정보를 받아서 백터화 시킨다고 생각하면됩니다. 그렇기 때문에 한번 퍼블리싱된후에는 해당 폰트가 없는 피씨에서 swf를 열어 보더라도 폰트정보를 읽어와서 텍스트를 보여주는것이 아니기 때문에 정상적으로 내가 선택했던 폰트로 나옵니다. 물론 fla 소스에서는 없는 폰트로 나오겠지만요...


그리고 dynamic과 input 텍스트 필드의 경우는 액션스크립트 또는 직접입력에 의해서 변수값을 받아 뿌려지는 형태입니다.

이것은 static과는 달리 퍼블리싱할때 백터화 시키지 않고 폰트정보만 기억하고 있다가 swf가 실행될때 내 컴퓨터의 폰트박스를 검사해서 해당 폰트가 있으면 그 폰트정보를 받아와서 동적으로 화면에 보여주게 됩니다. 그렇기 때문에 사용되었던 폰트가 없는 다른 PC 에서는 정상적으로 나오지 않게 되며 시스템 기본 폰트로 대치되어 나옵니다.


즉 dynamic, input 텍스트 필드는 백터 성분을 가진 심볼의 형태가 아니기 때문에 _alpha속성, _rotation속성, mask레이어가 적용되지 않습니다.


단, 마스크의 경우는 마스크레이어를 이용했을때에는 작동하지 않지만, setMask() 메서드를 이용해서 액션을 통해서 주게 되면 작동합니다. 이것은 조금 일관성없는 부분이긴합니다. 매크로미디어에서 플래시를 만들때 놓친부분인듯합니다. 즉 마스크레이어의 경우는 플래시 초기 버전부터 있었던 기능이었고 setMask의 경우는 mx 버전부터 나온 기능입니다. 초기버전에서는 생각지도 못했다는것이죠.

나중에 나온 setMask에서는 그 기능까지도 가능하게 만든것이라 여겨집니다. 그리고 마스크레이어에도 이것을 적용시키는것에는 놓치거나 크게 중요하다고 생각하지 않은것 같습니다.


해결방법 :

 다이나믹과 인풋 텍스트필드에서 퍼블리싱 할때 폰트 정보 뿐만 아니라 그 정보를 이용해서 쉐이프로 백터화 시켜버리면 해결되겠죠.

 그것이 임베드 폰트(embed font)입니다. embed 라는 말은 포함시켜버린다는 말이죠. 즉 폰트의 아웃트라인 백터 정보까지 포함시켜버리기 때문에 임베드 폰트가 적용된 텍스트는 static 텍스트에서 했던거와 똑같이 작동합니다. 즉 알파,회전,마스크가 모두 적용됩니다.


임베드 폰트 시키는 방법은 두가지가 있습니다.

1. 속성창에서 Character 창을 열어 한글,영문,그밖의 언어에 대해 해당 언어를 모두 임베드시키거나 입력된 글자만 임베드시키는 방법.

2. 액션스크립트를 이용해서 textFiled 오브젝트를 생성하고 해당 텍스트필드 오브젝트를 embedFonts 속성값을 true 로 지정하는 방법.


>> 속성창을 통한 폰트 임베드

1번의 경우에서 해당 언어를 모두 임베드시키게 되면 swf 파일안에 폰트정보가 모두 들어가기 때문에 상당히 용량이 커지게 되는 단점이 있습니다. 입력된 글자만 임베드시키게 되면 용량은 줄어드는 대신 다이나믹이나 인풋텍스트필드의 의미를 잃게 됩니다.

다이나믹이나 인풋은 유동적으로 내용이 변경되기 위해서 만든것이기 때문이죠. 이것을 쓸바에야 그냥 static를 쓰는게 낫겠죠.

물론 유동적으로 바뀌는 내용이 한정되 몇단어라면 상관이 없겠지만요..



>> 액션을 통한 폰트 임베드

2번의 경우에도 해당 폰트를 임베드시키기 때문에 파일 사이즈가 커지게 되어 있습니다. 우선 준비되어야되는것이 라이브러리 오른쪽 상단에 있는 아이콘을 누르면 New Font 라는 것이 있습니다. 즉 폰트 심볼을 만들어야됩니다.

라이브러리에 폰트심볼을 만들고 Linkage 설정에서 ID 값을 주게 되면 swf 퍼블리싱 때 자동으로 임베드 됩니다.

아무것도 내용이 없어도 이렇게 임베드만 시켜도 HY견고딕의 경우 257KB 라는 용량이 됩니다.  (용량이 커지는것을 해결하기 위해서는 임베드폰트한 swf 를 따로 만들어서 런타임공유심볼로 불러오는 방법도 있습니다.)


임베드 시킨다음 액션으로 해당 텍스트픽드의 임베드를 지정하면 끝납니다.  자세한 액션 코드는 다음과 같습니다.

my_txt.text = "지그프리 임베드 폰트 테스트입니다.";

my_txt.embedFonts = true;


myformat = new TextFormat()

myformat.font = "지그폰트"

my_txt.setTextFormat(myformat)

먼저 my_txt 라는 인스턴스네임으로 다이나믹 텍스트 필드를 만들고 라이브러리에서 New Font 를 통해 폰트심볼을 만듭니다.

New Font 심볼을 라이브러리에서 두번클릭해서 속성에서 내가 임베드시킬 폰트를 선택합니다.(폰트이름(Name)은 크게 상관없습니다.)

해당 폰트심볼을 마우스 오른쪽 클릭 메뉴에서 Linkage 옵션창을 열어서 첫번째에(Export for ActionScript) 체크 합니다.

그리고 바로 위에 ID 입력란에 액션으로 불러올 이름을 지정합니다. 저는 위에서 "지그폰트"라고 입력했습니다.

그리고 나서 프레임에 위와 같은 액션을 입력하면 끝입니다.


스크립트에 대한 설명 :

  1 .my_text 라는 텍스트 필드 오브젝트에 text 속성을 이용해서 문자열을 입력합니다.

  2. my_text 라는 텍스트 필드 오브젝트를 임베드 폰트로 지정합니다.

  3~4. 폰트 포멧을 지정하기 위해서 TextFormat() 오브젝트를 생성하고 font 속성을 지정합니다.

  5. 설정해놓은 텍스트 포멧(myformat)을 준비해놓은 my_txt 텍스트 필드에 적용합니다.

Posted by 으니가저아
:

플래쉬에서 함수 선언을 한 다음


this.watch( "자바스크립트에서호출할함수명", 함수명, null );


이렇게 지정한 후 자바스크립트에서


movie.SetVariable( "지정한함수명", "" );


이런식으로 호출하면 된다.


예)


플래쉬에서...


function test()

{

   getURL("alert('Test');");

}


this.watch( "test", test, null );


자바스크립트에선...


호출시


movie.SetVariable( "test", "" );


Posted by 으니가저아
:
setFocus()     flash.display.Stage.focus  메서드에서 접근자 속성으로 변경되었으며, 이름이 focus로 변경되었습니다. ActionScript 2.0의 경우 반환값의 데이터 유형이 String이었지만 ActionScript 3.0에서 이 속성의 데이터 유형은 InteractiveObject입니다.

 

 ---AS2---

     Selection.setFocus(Textfield);

 

 

 ---AS3---

     stage.focus = TextField;

 

 


1.플래시CS3 IDE에서 이걸 제대되는지 체크하기 힘들다.

플래시CS3에서 Ctrl + Enter 테스트 무비를 했을때 플래시 스탠다드 플레이어가 키값을 제대로 잡아 내지 못하고 있기때문이다.

(키보드를 누르게 되면 플래시 CS3프로그램의 단축키가 실행된다)


2.플래시CS3의 임베디드 코드에서는 작동하지 않는다.

기본적으로 플래시CS3에서 퍼블리싱하더라도 임베디드 코드상에서는 작동하지 않는다.

(정확한 이유는 본인이 확인을 못하겠다. 하지만 임베디드 코드의 경우 플래시 임베디드 된 것이 익스플로어 상에서 포커스를 잃어 버려서 이기 때문일것이다.)

이부분의 해결 방법으로 강제로 끝에 포커스를 넘겨주는 방법으로 해결했다.

 

 

 ---Javascript---

     document.getElementById("sample").focus();

 


3. wmode= transparent에서는 포커스를 주지않아도 제대로 작동하는것 처럼 보이지만 포커스가 제대로 가지 않는다.

백스페이스 키를 누르게 되면 history.back()이 작동한다. -_-;;;


Posted by 으니가저아
:

mp3플레이어관련..

DEV_FLASH 2007. 11. 13. 17:31 |

외부 MP3 파일 로드

런타임에 MP3 파일을 로드하려면 Sonnd 클래스의 loadSound() 메서드를 사용합니다. 먼저, 다음과 같이 새 Sound 객체를 작성합니다.

var song_1_sound = new Sound();

작성된 새 객체의 loadSound()를 호출하여 이벤트나 스트리밍 사운드를 로드합니다. 이벤트 사운드는 완전히 로드된 후에 재생되지만, 스트리밍 사운드는 다운로드되면서 재생됩니다. loadSound 메서드의 isStreaming 매개 변수를 설정하여 사운드를 이벤트 사운드 또는 스트리밍 사운드로 지정할 수 있습니다. 이벤트 사운드의 로드를 마치면 Sound 객체의 start 메서드를 호출하여 사운드를 재생해야 합니다. SWF에 데이터가 충분히 로드되면 스트리밍 사운드가 재생됩니다. 이 경우에는 start() 메서드를 사용하지 않아도 됩니다.

예를 들어, 다음 코드에서는 classical이라는 새 Sound 객체를 작성한 다음, beethoven.mp3이라는 MP3 파일을 로드합니다.

var classical:Sound = new Sound();
classical.loadSound("http://server.com/mp3s/beethoven.mp3", true);

대부분의 경우, isStreaming 매개 변수는 true로 설정됩니다. 특히, MP3 “주크박스” 응용 프로그램을 작성하는 경우처럼 빠른 재생이 필요한 큰 사운드 파일을 다시 로드하는 경우 이와 같이 설정됩니다. 하지만, 길지 않은 사운드 클립을 다운로드하면서, 사용자가 버튼을 클릭하는 순간과 같이 지정된 시점에 다운로드한 사운드 클립을 재생해야 한다면 isStreamingfalse로 설정합니다.

사운드의 다운로드 작업이 언제 완료되는지 알아보려면 Sound.onLoad 이벤트 핸들러를 사용합니다. 이 이벤트 핸들러는 부울(true 또는 false) 값을 자동으로 받습니다. 이 부울 값은 파일 다운로드가 성공적으로 완료되었는지 여부를 나타냅니다.

예를 들어, 사용자의 게임 단계에 따라 서로 다른 사운드를 사용하는 온라인 게임을 만든다고 생각해 보십시오. 다음 코드에서는 MP3 파일(blastoff.mp3)을 gameSound라는 Sound 객체로 로드한 다음, 다운로드가 완료될 때 그 사운드를 재생합니다.

var gameSound = new Sound();
gameSound.onLoad = function (loadedOK) {
if(loadedOK) {
mySound.start();
}
}
gameSound.loadSound("http://server.com/sounds/blastoff.mp3", false);

사운드 파일의 경우에는 MP3 사운드 파일 유형만 지원합니다.

자세한 내용은 Sound.loadSound, Sound.start()Sound.onLoad를 참조하십시오.




스트리밍이 된다는걸로 보이는데요....걍 레퍼런스에서 보기만 한거라...테스트는 전혀 안해봤습니다..-0-

Posted by 으니가저아
: