scaleform.minarto.com

MMOKit 0 - DataBinding 0 본문

Communication

MMOKit 0 - DataBinding 0

미나토 2012. 3. 20. 20:50


사실 MMOKit 은 as2 버전으로도 있었습니다만... 그냥  껍데기에 가까운 샘플이었습니다.

as3 용으로 들어있는 MMOKit 데모야 말로 제대로 된 데모라고 볼 수 있습니다.

그런데 UDK 에는 이녀석이 들어있지 않습니다. 아마도 언리얼의 워크플로우에 맞는지 검증이 되지 않기 때문에 제외했다고 생각됩니다만... 뭐 에픽 맘이죠...


여러분은 다운받기 위해서는 스케일폼 홈페이지에 들어가서 트라이얼 버전을 받는 수밖에 없습니다.



암튼 어찌어찌하여 받아보셨다면, MMOKit 을 조금씩 분석해보도록 하겠습니다.



MMOKit 소스는 스케일폼을 따로 폴더를 지정하지 않고 설치하셨다면 다음과 같은 경로 안에 들어있습니다.

C:\Program Files (x86)\Scaleform\GFx SDK 4.0\Bin\Data\AS3\Kits\MMO

일단 그 안에 있는 MMOKit.exe 파일을 실행시켜 보세요... 그럼 MMOKit 이 실제 돌아가는 모습을 볼 수 있을 겁니다.


오늘 살펴볼 놈은 DataBinding 입니다. 사실 이놈은 MMOKit 에 들어있는 녀석은 아닙니다. CLIK 의 일부분이죠...

UDK 라면 다음 폴더 안에 들어있고, 

C:\UDK\UDK-2012-02\Development\Flash\AS3\CLIK\scaleform\clik\data

scaleform 이라면 다음 폴더 안에 들어있습니다.

C:\Program Files (x86)\Scaleform\GFx SDK 4.0\Resources\AS3\CLIK\scaleform\clik\data

그런데 왜 CLIK 포스팅 때는 다루지 않다가 지금 다루느냐...


CLIK 은 콤포넌트들의 분석을 위주로 한거였고... 이번이 어쩌면 실전입니다.
콤포넌트 백날 분석해봤자 뭐하나요... 실제 데이터를 받아 돌아가야죠...

DataBinding 을 통해 클라이언트의 데이터와 바인딩 되면서 스케일폼의 플래시 파일들은 진짜 생명력을 얻는다고 보시면 됩니다.


com.scaleform.mmo.unitframes.PlayerUnitFrame.as
파일을 한번 보죠


public function PlayerUnitFrame() {
    super();
    configUI();
}
        
protected function configUI():void {           
    DataBinding.createBinding("player.name", setName, this);
    DataBinding.createBinding("player.level", setLevel, this);
}


 
생성자 함수가 실행되면 초기화 함수인  configUI가 실행되고, 그 안에서 데이터 바인딩이 일어납니다.

첫번째 인자인 key 값은  "player.name" 입니다. 이 키에 매핑된 값이 변하면  setName 함수가 이 값을 인자로 실행되는 것이죠.
세번째 인자인 this 는 함수의 scope 를 말하는 것으로 보이는데, 음... as3 에서는 scope 는 자동으로 들어가게 되는데 꼭 필요한 것인지 잘 모르겠네요...


암튼 저렇게 실행됩니다...만,  "player.name" 는 어디서 튀어나온 것일까요...


자, 다음의 파일을 에디터에서 열어보세요...

C:\Program Files (x86)\Scaleform\GFx SDK 4.0\Apps\Kits\MMO\UI\GameUIDataBindings.cpp

네, c++ 파일입니다. 그렇다고 플래시 개발자들은 겁먹을 필요없습니다. 이걸 가지고 어떻게 하자는게 아니니까요. 저도 c++ 전혀 해본적 없습니다.

어쨌든 파일을 열어보면, 1129번째 행에 다음과 같은 함수가 정의되어 있습니다.

void    GameUIAdapter::registerBoundDataWrappers()
{
    // Install bindings
    DataBindingAdapter->RegisterBoundData("player.name",    *SF_NEW DW_PlayerInfo(Client, Game::INFO_Name)); 




1196 행에는 다음과 같은 함수가 있습니다

void    GameUIAdapter::HandlePlayerInfoChange(Game::InfoType p)
{
    switch (p)
    {
    case Game::INFO_ID: DataBindingAdapter->NotifyDataChange("player.id"); break;
    case Game::INFO_Name: DataBindingAdapter->NotifyDataChange("player.name"); break; 



자, " player.name" 이 보이십니까?

전 c++ 은 모르는 플래시 개발자이니 여기까지만 하겠습니다. 여기 부분은 클라이언트 개발자가 수정을 해서 쓰던가 하겠죠...
저희는 이 파일을 참조하시라고 힌트 정도를 주면 되겠죠? :^)


어쨌든, 이것은 key 이름만 보면 바로 알 수 있듯이 플레이어의 이름값에 매핑된 key이고... 이걸  DataBinding 을 통해서 플래시에서 바인딩 되게 하면 됩니다.

DataBinding.createBinding("player.name", setName, this);

요 한줄로 바로 클라와 통신이 된 것이죠... 너무 쉽지 않나요??

바인딩 해제는 똑같습니다.

DataBinding.deleteBinding ("player.name", setName, this);

해주시면 되요~~



이번에는 아주 간단한 기초로 보시면 됩니다...