뭐, 이정도일 겁니다... Extensions.enabled 에 대해서는 처음에 설명했지요???
if (stage === this.parent) {
Extensions.enabled = true;
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
if (Extensions.enabled) {
}
else{
}
}
입니다. 여기서부터가 이제 아스트랄해지는 부분입니다...
바로 앞선 구문에서
Extensions.enabled 에 true 값을 대입연산자인 = 로 줬습니다...
// Enable/disable GFx extensions
static public function set enabled(value:Boolean) : void {}
static public function get enabled() : Boolean { return false; }
Extensions class의 enabled 함수가 구현되어 있는 모습입니다... 뭔가 이상하지 않나요??? 보통 set/get 함수를 만들면 다음과 같이 해야 하지 않나요?
static private var _enabled:Boolean = false;
static public function set enabled(value:Boolean) : void {
_enabled = value;
}
static public function get enabled() : Boolean { return
_enabled ; }
이렇게 말이죠... 그런데 Extensions class 안에는 _enabled 이 없습니다...
이녀석은 바로 scaleform 에 저장되는 값이기 때문입니다.
그렇다면 if (Extensions.enabled) 문의 비밀이 나옵니다.
Extensions.enabled = true;
if (Extensions.enabled) {
// 이 swf 가 돌아가는 vm은 scaleform 플레이어입니다
}
else{
// 이 swf 가 돌아가는 vm은 Flash 플레이어입니다
}
이 구문은 현재의 vm을 판단하는 부분입니다... 플래시 플레이어에는 _enabled 값이 저장될 곳이 없으니 언제나 get enabled() 가 false 만을 반환하기 때문이죠...
그런데 여기서 의문이 남습니다... 어차피 scaleform으로 돌릴 것을 만드는데, 왜 flash player 에서 돌리려고 하는건가요???
5. 그러니깐 그게 왜 필요한데... 어따 쓸거냐고...
스케일폼 플레이어는 디버깅에 제한을 받습니다... trace는 찍어주는데 break point 가 안먹어요...(제가 방법을 모르는 것인지는 모르겠습니다만...)
물론 하려고만 하면야 trace만으로도 잘 개발할 수 있습니다만... break point 가 좀 필요할 때가 있는 것도 사실이지요...
바로 디버깅의 편리함을 가져다 주기 위함이예요...
고작 브레이크포인트 디버깅 때문에 코드를 더럽히냐고 하실 수 있지만... 어차피 저 코드는 어떤 상황에서건 최초에 딱 한번만 실행됩니다. 런타임의 실행속도와 무관하지요...
이외에도 뭔가 다른 곳에 필요치 않을까요??? :^)
p.s. 사실 저는 다르게 만들어써요 ㅋㅋㅋ
p.s. 써놓고 보니깐 제목을 vm 판단하기...라고 지을걸 그랬나 싶다는... 이놈의 필력이란...
p.s. 12.02.15 추가
4.0.15 버전의 Extensions 클래스 안에 get isScaleform() : Boolean 과 isGFxPlayer : Boolean 속성이 생겼습니다.
이상하게 네이밍을 지은게 아니라면 이 속성으로 현재의 VM이 스케일폼인지 아닌지를 판단할 수 있을 듯 합니다