'as3 #initclip 최초실행코드'에 해당되는 글 1건

  1. 2008.09.17 [팁] AS2의 #initclip 마이그레이션 (2)
2008. 9. 17. 18:16

[팁] AS2의 #initclip 마이그레이션


예전 AS2시절 플래시를 사용해 작업하다보면 각 무비클립 클래스들의 생성이 되기
전에 뭔가 미리 초기화 작업을 해줘야 될 때가 있었다.

그때 가장 많이 사용하던게 #initclip 키워드다.
이 키워드를 사용한뒤에 코딩하면 그 뒤에 나오는 코드는
각 무비클립들이나 메인 타임라인의 첫 줄 코드보다도 더 먼저 실행된다.

사실 별로 사용할 기회가 없어서 그냥 알아만 두고 있었다.

현재는 모든작업을 AS3기반으로 하고 있는데 #initclip을 사용하려고 보니
AS3로 넘어가면서 이 키워드가 삭제 되어버렸다.

보통 기능을 없애더라도 대안이 있게 마련인데 아무리 문서를 찾아봐도 딱히
대안으로 처리할 방법이 없었다.

어쨋든 상황은 메인 클래스(최상위 타임라인)과 그 안에 자식 클래스들의
생성자가 실행되기 전에 flashVars에서 값을 얻어내야 것이다.

도무지 답이 안나와서 한참 고민하다가 좀 허무하게 해결

Test클래스에 init이라는 함수를 static 형식으로 만들고
Main 클래스에서 다음과 같이 호출을 하니 보다 더 빨리 실행이 된다.

package
{
    import flash.display.Sprite;
    public class Main extends Sprite
    {
        private var test:Array = Test.init();
        public function Main()
        {
            trace("###");
        }
    }
}


package
{
    import flash.display.Sprite;
    public class Test extends Sprite
    {
        public static function init():Array
        {
            trace('init');
            return [];
        }
        public function Test()
        {
            trace("!!!");
        }
    }
}


output
-----------------------------------
init
!!!
###

편법인지 뭔지는 모르겠으나
이렇게해서 예전에 쓰던 #initclip 대용으로 잘 해결하였다.

혹시 더 좋은 방법 아시는분 있으면 알려주세요~~

Trackback 0 Comment 2
  1. 꽃녀 2008.09.17 19:33 address edit & del reply

    음..정적 초기화로 요런 방법이 있었네여
    써먹어 봐야겠어용..
    감사합니당^^

  2. okgosu 2008.09.18 02:08 신고 address edit & del reply

    플래시VM에서 static을 항상 먼저 실행해서 비롯된 결과인것 같네요...

    ps. 예전에 C프로그램을 짤 때 함수명을 Test로 줬는데 아무리 해도 원하는 결과가 안나오더라구요..원인은 Test가 키워드여서 그랬지요...
    Main, Test는 준 키워드류에 속하기 때문에 MainFunc, TestApp등으로 이름을 바꿔주시길..