Flash에서 Javascript의 변수를 가져오기 위한 방법은 보통 아래와 같습니다.

// in Javascript
<script type="text/javascript">
var str = "string value";

function getStr()
{
    return str;
}
</script>

// in Flash
var str: String = ExternalInterface.call( "getStr" );

함수 일일이 만들기 귀찮죠.

아래와 같이 써봅시다.

// in Javascript
<script type="text/javascript">
var str = "string value";
</script>

// in Flash
var str: String = ExternalInterface.call( "eval", "str" );

어때요?

참 쉽죠?

그리고 이거 아세요?

숫자나 변수, 배열뿐만 아니라 Object도 전달된다는 사실?

// in Javascript
<script type="text/javascript">
var flashObject = {};
flashObject.a = "property a";
flashObject.b = 100;
flashObject.c = [ "c1", "c2", "c3" ];
</script>

// in Flash
var obj: Object = ExternalInterface.call( "eval", "flashObject" );

var prop: String;
for( prop in obj )
    trace( prop + " : " + obj[ prop ] );
/*
c : c1,c2,c3
b : 100
a : property a
*/


사용자 삽입 이미지

참 쉽죠?


이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : eval, JavaScript, 변수


추천 : ★★★★☆

현재 웹페이지의 HTML, Javascript, CSS 를 DOM 형식으로 보여주고

디버깅은 물론이고 즉시 수정해서 반영할 수 있다.

IE 에 dev-toolbar 가 있다면 FF에서는 FireBug 를 들 수 있겠습니다.



추천 : ★★☆☆☆

웹개발자분들은 브라우져 창을 엄청 많이 띄워놓는데

그럴때 유용한 툴이다.

F4 를 누르면 현재 브라우져의 모든 탭을 Gird 형식으로 보여주고

필터링해서 볼 수도 있다.

웹페이지를 여러개 띄워놓고 테스팅할때 정말 좋은 툴이 되겠다.



추천 : ★★★★★

웹페이지의 트래픽 정보, 컨텐츠 내용,

Http Status 등을 볼 수 있다.

IE 에서 HTTPWatcher 를 쓰고 있다면

FireFox 에서도 똑같이 사용할 수 있다.

장점이라면 무료라는거?

웹페이지에서 Flash 로 네트워크 통신을 디버깅할때 필수라 하겠다.



추천 : ★★★☆☆

여러 컴퓨터에서 FF 를 사용할때

북마크를 서로 Sync 시켜주는 유용한 유틸이다.



추천 : ★★★★★

IE 의 알툴바를 떠올리면 된다.

솔직히 우클릭 드래그 모션이 너무 편해서 IE 를 떠나지 못했었다.

근데 우연찮게 살펴보다가

이게 있는것을 보고 지화자를 불렀다~!!

(솔직히 알툴바보다 훨 좋다.)



추천 : ★★★☆☆

우리나라는 Active-X 때문에 IE 가 꼭 필요하다.

이 플러그인은 링크나 북마크를 우클릭으로 IE 로 페이지를 띄울 수 있게 한다.

브라우져 일일이 열기 귀찮을때 정말 유용하다.

웹서핑은 FireFox 로 하다가 IE 를 켜야할때

우클릭으로 띄우면 끗~


플러그인 검색 및 다운로드 사이트

https://addons.mozilla.org/ko/firefox





언젠가부터 IE 를 떠나고 싶었는데

알툴바, 알패스, HttpWatcher 때문에 어쩔수 없이 쓰고 있었는데

이번에 이 플러그인들을 알게 되고 나서

기본 브라우져도 바꾸고

바탕화면에서 IE 아이콘을 지웠습니다. 잇힝~

솔직히 요즘 Ajax 로 개발되는 사이트나 블로그가 정말 많은데

안정성은 말할것도 없고

구글이나 블로깅은 정말 IE와 비교해서 너무 빠릅니다.

보다 편안한 웹브라우징을 위하여~~


이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : Firefox, IE, plugins

[AS3] int, uint, Number 표현의 한계

Posted 2008/06/02 11:58 by wooyaggo
int

10진수
최대 :  2147483647
최소 : -2147483648

지수표현
최대 :  2^31 - 1
최소 : -2^31

하드웨어 용량
최대 : 2 GB - 1 BYTE
최소 : -2 GB

시간 (sec)
최대 : 68년 35일 3시간 14분 7초
최소 : -( 68년 35일 3시간 14분 8초 )

시간 (ms)
최대 : 24일 20시간 31분 23초 647밀리세컨드
최소 : -24일 20시간 31분 23초 648밀리세컨드

uint

10진수
최대 : 4294967295 ( int.MAX_VALUE*2 + 1 )
최소 : 0.

지수표현
최대 : 2^32 - 1
최소 : 0

하드웨어 용량
최대 : 4 GB - 1 BYTE
최소 : 0 BYTE

시간 (second)
최대 : 136년 70일 6시간 28분 15초
최소 : 0초.

시간 (ms)
최대 : 49일 17시간 2분 47초 295밀리세컨드
최소 : 0밀리세컨드

Number

Number 는 지수 + 소수 로 이뤄진 표현법이기 때문에

어느 값 이상부터는 지수로 표현법이 넘어가서 주의해야 한다.

지수 표현법


이 이야기는 지수부분으로 표현이 되면

123 은 1.23e+2 으로 표현이 되어서 1을 더해도 1.24e+2 로 올바로 저장이 되지만

굉장히 큰 수 12345678901234567890 (0~9 두번 반복) 은

1.23e+19 로 표현이 되어서 1을 더한다고 하더라도

1.23e+19 로 인식이 된다.

테스트코드


가장 큰 값은 1.79e+308 (1.79 * 10^308) 이라는 어마어마한 값을 저장할 수 있다.

이는 용량으로 봤을때는 기가, 테라, 페타, 요타를 다 뛰어넘는 값까지 저장할 수 있다.

즉 굉장히 큰 수(innumerable)를 수를 다룰때는 적당하지만

디테일한 수를 비교하기에는 적합하지 않다.

이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : as3, double precision, IEEE 754, int, Number, Tip & Tech, uint

[AS3] Label 활용하기!!

Posted 2008/05/21 13:41 by wooyaggo
1. Label 활용.

label 을 다들 생소해하셔서 좀 더 말씀드리면

일련의 행위를 묶어주는 그룹핑이라고 생각하시면 됩니다.

예를 들어 함수내의 로직이 길때

일련의 동작을 레이블{} 형식으로 묶어줄 수 있습니다.

만약


function resizeListener( e: Event ): void
{
     var stageWidth: int = this.stage.stageWidth;
     var stageHeight: int = this.stage.stageHeight;
    
     if( stageWidth < 400 )
          stageWidth = 400;
    
     if( stageHeight < 300 )
          stageHeight = 300;
    
     if( stageWidth > 800 )
          stageWidth = 800;
    
     if( stageHeight > 600 )
          stageHeight = 600;
    
     this.canvas.resize( stageWidth, stageHeight );
}

이런 함수가 있다고 가정을 해보자

4개의 if 문은 stage 의 크기가 400x300 과 800x600 이하로만 설정한다는 이야기다.

하지만 자세히 살펴보면

stage 가 400x300 이하면 아래 두개의 if 문은 동작할 필요가 없다.

이럴때 label 을 이용해서 묶어줄 수 있다.

like this~


function resizeListener( e: Event ): void
{
     var stageWidth: int = this.stage.stageWidth;
     var stageHeight: int = this.stage.stageHeight;
    
     sizeLimit:
     {
          if( stageWidth < 400 )
               stageWidth = 400;
         
          if( stageHeight < 300 )
               stageHeight = 300;
         
          if( stageWidth == 400 && stageHeight == 300 )
               break sizeLimit;
         
          if( stageWidth > 800 )
               stageWidth = 800;
         
          if( stageHeight > 600 )
               stageHeight = 600;
     }
    
     this.canvas.resize( stageWidth, stageHeight );
}

예제가 그리 썩 유용해보이지는 않지만

저런식으로 활용할 수 있다라는걸 보여준다.

즉, 최소 기준에 이미 충족이 되면

그 밑의 두 if 문은 프로세스 자체가 건너뛰기 때문에

효율적으로 로직을 관리할 수 있다.

label 은 활용하기 따라서

함수내에서 여러 복잡한 로직을 그룹핑해줄 수 있고

시각적으로도 가독성을 높여줄 수 있다.

label 은 for, while, for each 다 가능하다.

하지만 아무래도 label 이 가장 효율적인 부분은 다중 루프 구문이 아닐까 한다 ^-^)/

Tag : 3.0, as3, Tip & Tech

[AS3] 우야꼬의 팁팁팁~

Posted 2008/05/20 18:31 by wooyaggo

1. 편하게 for문 돌리기


2. child 전부 없앨때 편한 구문


3. 2중 포문 빠져나가기


4. 파라미터 갯수를 모를때 함수에 파라미터 전달하는 법


5. 빠른 나누기



Tag : 3.0, as3, Tip & Tech

[AS3] 공씨가 만든 SWF LAB 홍보 플래시

Posted 2008/03/10 15:16 by wooyaggo


이쁜 색의 라인들이 자취를 남기며 유영을 하다가

화면을 클릭하면 홍보 문구만을 남기고 라인들이 사라집니다.

현우 이녀석 아이디어 대박이네요 ㅋ

너무 이뻐서 퍼놓습니당~

넌 이너뤡띠입 드자이너야

p.s) 참고로 현우가 홍보하고자 하는 곳은 이곳입니다.

Tag : 3.0, as3, SWF Lab, 공씨

아시는분들은 이미 아시겠지만

저는 운이 좋게도 input 필드를 별로 쓸 일이 없어서

실무에서는 겪은적이 없었지만

허무할정도로 간단한 방법이었네요.

많은 분들이 걱정했던 부분이 아닌가 싶네요.

TextField.alwaysShowSelection = true;

로 해주면 된다는군요.

Tag : 3.0, AIR, Tip & Tech

System.gc() 에 대해서 시행 착오.

Posted 2008/03/04 22:34 by wooyaggo

디버거 버젼에서만 돌아가는걸로 확인이 됐습니다.

"디버거"버젼이라는걸 생각못하고 되는줄 알았네요.

9.0.r115

Flash Player installer

 - http://www.adobe.com/go/getflashplayer

Flash Player installer debugger version

 - http://download.macromedia.com/pub/flashplayer/updaters/9/flashplayer_9_ax_debug.exe

Flash Player Uninstaller

 - http://download.macromedia.com/pub/flashplayer/current/uninstall_flash_player.exe

Tag : 3.0, AIR, as3, flash, 플래시

[AS3] System.gc() 테스트 2

Posted 2008/03/03 20:37 by wooyaggo

맨처음에 메모리 측정 - 1

5000 개의 Sprite 객체를 생성해서

변수에 null 을 대입해서

"mark and sweep" 상태로 만들어둔 후

메모리 측정 - 2

System.gc() 호출 후

메모리 측정 - 3

위 1, 2, 3 의 결과는 다음과 같았다.

8716288
10461184
8744960

테스트한 코드는 아래와 같다.

실행방법. 1 frame 에 아래 코드를 붙여놓고 실행한다.

소스보기


테스트 페이지 : http://www.as3.kr/gc2/

p.s ) 실험방법에 이상한 점이 있을 경우 리플 달아주세요.

Tag : 3.0, as3, GarbageCollector, 플래시

[AS3] 웹에서 System.gc() 테스트

Posted 2008/03/03 19:47 by wooyaggo


안되나?

되네...

-_-??

....!!!

-_-!!!!!

되자나!!

p.s) first 와 last 가 차이나는것은 컴퍼넌트때문에 초기화시간이 걸리는것 같다 -_-

p.s) 안되는 분은 플레이어 업데이트 해주세요.

여러분들의 검토를 부탁합니다 -_- 되는거 맞나? 그럼 초 대박인거 같은데;;

GarbageCollectorSWF.as


소스 다운로드


Tag : 3.0, as3, GarbageCollector

Flex3 에서 Interface 작성할때 주의~

Posted 2007/11/29 14:25 by wooyaggo
package ad.text.banner
{
     public interface IBanner
     {
          function reset():void;
          function start():void;
          function pause():void;
          function create(initializeData:XML):void;
     }
}

인터페이스 작성할때

Flex 2에서는 그냥 대충 적어줘도 알아서 적용되서 Code Hint 에 나타났지만

Flex 3 에서는 각 메소드 뒤에 ; (세미콜론) 을 찍어주셔야 Code Hint 에 나타납니다 -_-a

주의하시길;;

Tag : 3.0, as3, Flex3, 인터페이스

[AS3] SWC 로 폰트 가볍게 Embed 하기

Posted 2007/10/10 11:34 by wooyaggo
플래시로 개발하면서

가장 짜증나는 부분중에 하나가

신나게 프로그래밍하다가 테스트해보기 위해서 모니터에

모든 정신 쏟은 채로 두근두근 하며

Ctrl + Enter 작렬!!!
사용자 삽입 이미지

...
사용자 삽입 이미지

...
사용자 삽입 이미지

...
사용자 삽입 이미지

...

기운 쭉 빠지는 순간이 아닐 수 없다.

다름아닌 폰트 임베딩 때문인데

매번 컴파일할때마다 폰트를 임베드 하기 때문에

개발속도가 느려져버리는건 당연하고 의욕도 떨어지고 짜증만 늘어난다.



자 그럼 이번에는 SWC 를 이용해서 폰트 임베등을 가볍게 하는 방법을 알아보자.

우선 새로운 fla 를 생성하고 (저장할 필요 없다.)

사용자 삽입 이미지

텍스트필드를 바탕에 하나 만들어준다.

사용자 삽입 이미지

그리고 Property 패널에 Embed 버튼을 선택해서 임베트할 Character-set 을 설정한다.

사용자 삽입 이미지

그리고 텍스트필드를 무비클립으로 생성해준다.

(한글이나 특수문자는 안되고 일반 변수명 작명하는 방법으로 네이밍한다. 때문에 한글폰트의 경우 네이밍을 잘 해야 혼동되지 않는다.)

사용자 삽입 이미지

그런다음 Library 패널에서 무비클립을 우클릭하여 나오는 메뉴중에서

Export SWC File 을 선택해서 swc 파일로 export 한다.

사용자 삽입 이미지

export 할 위치는 플래시의 컴퍼넌트 폴더여야 하며

보통 사용자폴더\AppData\Local\Adobe\Flash CS3\en\Configuration\Components\

로 되어 있다. 반드시 확인을 하자.

파일명은 한글로 해도 상관없다.

본인은 폰트만 따로 모아둘 요량으로 Fonts 라는 폴더를 따로 만들어 그안에 저장했다.

사용자 삽입 이미지

그런다음 컴퍼넌트 패널에서 우측의 쪼마난 메뉴에서 Reload 메뉴를 선택하자.

사용자 삽입 이미지


그러면 컴퍼넌트 패널이 업데이트 되면서 방금 export 한 폰트가 생성됐다.

이제 맑은 고딕이라는 폰트를 만드는 것은 성공이다.

이제 사용하는 법만 알면 된다.

사용자 삽입 이미지

이제 새로운 fla 를 생성해서

컴퍼넌트패널에서 생성된 폰트를 드래그하여 Library 창에 추가한다.

이게 끝이다.

이제 폰트가 embed 되어있는지 확인해볼 차례다.

액션창에 아래 소스를 넣어보자.

var fonts:Array = Font.enumerateFonts();

var font:Font;

for each(font in fonts)
     trace(font.fontName);

임베드한 폰트의 이름을 확인할 수 있을것이다.

자 그럼 사용을 직접 해보자.

우선 Library 에 있는 폰트 swc 를 지워서 깨끗하게 해놓은 다음에

역시 마찬가지로 액션창에 아래와 같이 써보자.

var txt:TextField = new TextField();
txt.defaultTextFormat = new TextFormat("맑은 고딕", 12);
//txt.embedFonts = true;
txt.text = "abcdef";

addChild(txt);

embedFonts 가 주석처리 되어 있기 때문에

아마 텍스트가 잘 보일것이다.

이번엔 주석을 풀고 다시 해보자.

var txt:TextField = new TextField();
txt.defaultTextFormat = new TextFormat("맑은 고딕", 12);
txt.embedFonts = true;
txt.text = "abcdef";

addChild(txt);

폰트가 임베드되어 있지 않기 때문에 텍스트가 보이지 않는다.

그러면 이제 컴퍼넌트 패널에서 폰트를 드래그하여

Library 에 추가한다음 다시 컴파일해보자.



이뿌게 Embed 되어 있는 폰트를 볼 수 있을것이다.

이제 폰트 때문에 짜증날일은 없을것이다.

많은 유저들에게 도움이 되었으면 좋겠다.

Tip

more..


도움 됐으면 리플 ↓ ㄱㄱ

Tag : 3.0, ActionScript, as3, flash, Tip & Tech, 플래시

[AS3.0] 반복되는 소스!! 이렇게 해결하자.

Posted 2007/10/08 14:47 by wooyaggo

개발을 하다보면 아직 라이브러리가 많지 않아서

중복되는 코드를 많이 쓰게 된다.

나는 그중에서 IEventDispatcher 가 제일 쓰기 귀찮다.

대략 아래와 참조.

package
{
     import flash.events.Event;
     import flash.events.IEventDispatcher;
     import flash.events.EventDispatcher;

     public class Sample implements IEventDispatcher
     {
          private var dispatcher:EventDispatcher = new EventDispatcher();
         
          public function hasEventListener(type:String):Boolean
          {
               return this.dispatcher.hasEventListener.apply(null, arguments);
          }
         
          public function willTrigger(type:String):Boolean
          {
               return this.dispatcher.willTrigger.apply(null, arguments);
          }
         
          public function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0.0, useWeakReference:Boolean=false):void
          {
               this.dispatcher.addEventListener.apply(null, arguments);
          }
         
          public function removeEventListener(type:String, listener:Function, useCapture:Boolean=false):void
          {
               this.dispatcher.removeEventListener.apply(null, arguments);
          }
         
          public function dispatchEvent(event:Event):Boolean
          {
               return this.dispatcher.dispatchEvent.apply(null, arguments);
          }
         
     }
}

저걸 매번 타이핑한다고 생각해보자...

어후... 아무리 Code Assist 가 된다지만 저걸 일일이 타이핑하는건

능률저하를 일으키는 요인이 아닐수 없다.

저렇게 일일이 타이핑해야한다는 생각에

Interface 사용을 자제할지도 모른다는 생각까지도 든다.

그래서 include 구문을 이용해서 간단하게 줄여보자.

일단 아래와 같은 텍스트 파일을 만든다.

나 같은 경우에는 확장자명을 source 라고 했다.

어차피 컴파일할때만 쓰이는 파일이기 때문에 나만 알아보면 된다^^

/**
*
* Implements IEventDispatcher
*
* */


import flash.events.EventDispatcher;
import flash.events.Event;

private var dispatcher:EventDispatcher = new EventDispatcher();

public function hasEventListener(type:String):Boolean
{
     return this.dispatcher.hasEventListener.apply(null, arguments);
}

public function willTrigger(type:String):Boolean
{
     return this.dispatcher.willTrigger.apply(null, arguments);
}

public function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0.0, useWeakReference:Boolean=false):void
{
     this.dispatcher.addEventListener.apply(null, arguments);
}

public function removeEventListener(type:String, listener:Function, useCapture:Boolean=false):void
{
     this.dispatcher.removeEventListener.apply(null, arguments);
}

public function dispatchEvent(event:Event):Boolean
{
     return this.dispatcher.dispatchEvent.apply(null, arguments);
}

그리고 위 내용이 적힌 파일을 IEventDispatcher.source 라고 저장한다.

메모장에다 해도 상관없다.

그리고 경로를 잘 만들어둔다.

나 같은 경우에는 pro/events/ 폴더 안에 위치했다.

그리고 적용할 클래스는 pro/fonts/ 안에 위치해있다.

자 본문에는 아래와 같이 쓰면 된다.

package pro.fonts
{
     import flash.events.IEventDispatcher;
    
     public class RSF implements IEventDispatcher
     {
          public function RSF(singletoneEnforcer:SingletoneEnforcer){}
         
          include "../events/IEventDispatcher.source";
     }
}

이렇게 하면 Flex 에서도 include 구문을 지원하기 때문에

오류 없이 잘 사용할 수 있다.

-_-)b

Tag : 3.0, include, Tip & Tech, 인클루드

사용자 삽입 이미지



















Flash CS3 에서 불편했던게

바로 저 무비클립 자동 선언 부분을 새 fla 를 열때마다 일일이 해제해줬어야 했는데

여간 불편한게 아니었죠.

자 아래와 같은 방법으로 기본 셋팅으로 설정해줄 수 있습니다.

(주의 : Document Class 도 같이 기본 저장되니까 DC 는 반드시 비워두세요.)

일단 아래와 같이 기본 셋팅을 맞춰놓습니다.

저의 경우에는 HTML 퍼블리싱을 하지 않기 때문에

Flash 만 선택해놨고 DocumentClass를 비워둔체 자동선을 해제해줬습니다.

그리고 기본 프레임웍을 셋팅해줬습니다.

(크게 보시려면 위에 Enlarge 버튼을 눌러주세요)

확대

이제 새로운 문서를 열때마다 지금 지정해준 설정대로 생성됩니다.