예전에 개발을 할 때 flash를 개발할 때 arguments같은 기능이 있지 않을까 해서 많이 찾아 헤매었던 기억이 있다. 왜 찾았었냐하면 특정 폰트에 이펙트를 입힌 swf를 많이 그려줘야 하는데 하나하나 만들기 도저히 귀찮아서 못하겠던 것. 그래서 나는 결국 글자를 동적으로 바꿀 수 있는 방법을 구상했고, 그래서 찾아 낸 방법은 FlashVars였다.
FlashVars는 Flash에 특정 인자를 전달하여, 로딩할 때 구동되게 하는 방식이다. 상당힌 간결하게 이용이 가능한데, flash에서는 어떻게 받아왔었는지 기억조차 나지 않지만 어쨌든 쉽게 받아왔었다.
그래서 Flex(Flash Builder)에서 이용하려고 하는데 기억이 안나서 잠시 기억 좀 더듬고 인터넷좀 찾아서 기억해냈다. 하하.
* 보고 따라하실 분들은 맨 아래부터 보시면 되겠다. 위에부터 따라하면 패망함.
우선 FlashVars를 이용하려면 플래시를 불러오는 HTML파일을 수정할 필요가 있다. 기본적으로 Flex를 컴파일하면 생성되는 파일인 Project명.html을 열어보면 아래 두 개의 부분을 주의깊게 봐주자.
<script type="text/javascript"> | |
<!-- For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. --> | |
var swfVersionStr = "10.0.0"; | |
<!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. --> | |
var xiSwfUrlStr = "playerProductInstall.swf"; | |
var flashvars = {}; | |
flashvars.name="idiot!"; | |
var params = {}; | |
params.quality = "high"; | |
params.bgcolor = "#ffffff"; | |
params.allowscriptaccess = "sameDomain"; | |
params.allowfullscreen = "true"; | |
var attributes = {}; | |
attributes.id = "Test"; | |
attributes.name = "Test"; | |
attributes.align = "middle"; | |
swfobject.embedSWF( | |
"Test.swf", "flashContent", | |
"500", "500", | |
swfVersionStr, xiSwfUrlStr, | |
flashvars, params, attributes); | |
<!-- JavaScript enabled so display the flashContent div in case it is not replaced with a swf object. --> | |
swfobject.createCSS("#flashContent", "display:block;text-align:left;"); | |
</script> |
우선 첫 번째 소스코드이다. JS에서 swf를 불러오는 것을 생성해주는 부분이다. 여기서 원래 일반 소스에는
var flashvars = {};
var params = {};
와 같은 방식으로 되어있다. 그러나 flashvars에 새 내용을 추가하고 싶다면 저 두 줄 사이에
flashvars.변수명 = 값
으로 작성할 수 있다(물론 꼭 두 번째 줄이어야하는 것은 아니고 swfobject.embedSWF 전에만 하면 될 것 같지만 저게 더 예쁠 것 같다)
예를 들자면
var flashvars = {};
flashvars.id = 3;
var params = {};
으로 하면 된다.
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="500" height="500" id="Test"> | |
<param name="movie" value="Test.swf" /> | |
<param name="quality" value="high" /> | |
<param name="bgcolor" value="#ffffff" /> | |
<param name="allowScriptAccess" value="sameDomain" /> | |
<param name="allowFullScreen" value="true" /> | |
<param name="FlashVars" value="name=idiot!" /> | |
<!--[if !IE]>--> | |
<object type="application/x-shockwave-flash" data="Test.swf" width="500" height="500"> | |
<param name="quality" value="high" /> | |
<param name="bgcolor" value="#ffffff" /> | |
<param name="allowScriptAccess" value="sameDomain" /> | |
<param name="allowFullScreen" value="true" /> | |
<!--<![endif]--> | |
<!--[if gte IE 6]>--> | |
<p> | |
Either scripts and active content are not permitted to run or Adobe Flash Player version | |
10.0.0 or greater is not installed. | |
</p> | |
<!--<![endif]--> | |
<a href="http://www.adobe.com/go/getflashplayer"> | |
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" /> | |
</a> | |
<!--[if !IE]>--> | |
</object> | |
<!--<![endif]--> | |
</object> |
그리고 또 다음 소스에도 비슷한 방향으로 변경해주어야 한다.
원래는 param에
<param name="FlashVars" value="name=idiot!" />
이 행은 아예 존재하지도 않는다. 그러므로 새롭게 추가하여 value에 key=value쌍으로 추가해주면 된다. 중복적으로 추가해주고 싶을 경우 get request를 설정하듯 key1=value1&key2=value2 와 같은 방식으로 설정할 수 있다.
그리고 소스코드를 수정한다.
public class Test extends Sprite | |
{ | |
public function Test() | |
{ | |
var obj:Object = root.loaderInfo.parameters.name; | |
var textField:TextField = new TextField; | |
textField.x = 50; | |
textField.y = 50; | |
textField.text = obj.toString(); | |
addChild(textField); | |
} |
root.loaderInfo.parameters.변수명 으로 접근을 하면 된다.
그러면 성공적으로 이용할 수 있다.
'study > as3' 카테고리의 다른 글
재귀적 방식을 이용한 Movieclip 의 정지와 재생 (0) | 2012.06.07 |
---|---|
Movieclip 여러개를 띄우기(duplicate movieclip, movieclip deepcopy) (0) | 2012.05.31 |
Action Script에서의 Deep copy (0) | 2012.05.30 |
BulkLoader사용시 중북된 로더 이용 및 weak reference에 대해서 (0) | 2012.05.16 |
[AS3]머리 아파서 쓰는 몇 가지 정리들 (0) | 2012.04.12 |