일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- as3
- Document Class
- addChild
- as3.0
- scaleform
- 클릭
- MMOKit
- GDC
- KGC 2013
- CLIK
- 스케일폼
- 집합의 연산
- watch
- as2
- 수학정석
- 샌프란시스코
- scaleform3
- scaleform4
- 플래시
- 형변환
- flash cs3
- Chart
- 태그클라우드
- flash
- ApplicationDomain
- DataBinding
- 애드온
- 강좌
- flash player 10
- autodesk
- Today
- Total
scaleform.minarto.com
Object.watch 를 이용한 DataBinding 0 본문
scaleform4 에서는 CLIK 에 있는 DataBinding 을 통해서 클라와 데이터를 바인딩합니다.
(뭐, 다른 커뮤니케이션 방법도 있지만요... 가장 간단한 방법을 말한겁니다)
플래시(플렉스) 내부 에서는 데이터 바인딩을 위해 set/get 함수를 많이 사용합니다.
function set level($v:Number):void{
handler($v);
}
뭐, 이런 식 말이죠...
하지만 as2를 위한 한가지 방식이 더 있습니다. 바로 Object.watch 를 이용한 방법입니다. (as3에서는 지원하지 않습니다. 쓸 필요도 없고요)
as2나 js를 좀 해보신 분들은 이미 아시고 있을테니 뭐 제 설명은 필요치 않겠죠...
모르는 분들은
http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/2/00001438.html#1358707
자세한 설명은 이걸 보시면 되고요...
암튼 이걸 활용하면 as3용 CLIK 의 DataBinding 을 사용하듯이 클라이언트와 굉장히 편하게 바인딩을 할 수 있습니다.
예를 들어 이런거죠... 다음의 코드를 보시면...
var player = {};
_root.player = player;
player.level = 0;
player.watch("level", f);
function f($p:String, $o, $n):Void{
trace($n);
}
player.level = 1;
플레이어의 레벨을 클라이언트와 UI가 동기화하기 위한 코드입니다
실행해보시면 level 에 1이 들어간 순간 f라는 함수가 실행되어 새로 들어온 값인 1을 출력하게 됩니다.
이게 동작하는 것을 확인했다면 모든 플레이어 데이터를 _root.player 객체에 키값으로 넣어놓고선 클라가 직접 해당 키값만 Direct Access 로 바꿔버리면 해당 함수가 실행되게 되는 겁니다.
뭔가 굉장히 편해보이지 않습니까??? 아닌가???....ㅡ.,ㅡ;;;
클라이언트가 특정 UI를 찾고선 해당하는 메소드에 인자를 던져서 실행할 필요가 없는거죠...
예를 들어 플레이어의 레벨이나 이름, 또는 돈 같은 데이터들은 한곳의 UI에만 사용되어지는게 아닙니다. 적어도 한 4-5 군데는 되죠...
플레이어정보창, 인벤토리, 창고, 상점, 편지, 스킬상점, 경매장 등등에 돈 데이터가 변해야 한다면
_root.경로.경로.플레이어정보창.setMoney
_root.경로.경로.인벤토리.setMoney
_root.경로.경로.창고.setMoney
_root.경로.경로.상점.setMoney
_root.경로.경로.편지.setMoney
_root.경로.경로.스킬상점.setMoney
_root.경로.경로.경매장.setMoney
이런 식으로 클라이언트가 Direct Access 를 해야할 겁니다. (현재 저희는 이렇게 해요)
클라가 모든 UI의 패스를 알아야 하고, 모든 UI 의 돈 데이터를 저장할 api를 알고 있어야 하죠... 각 UI의 onLoad 도 기다려야 합니다
그런데 그럴 필요가 없다는 거죠.
_root.player.gold 의 값만 Direct Access 로 바꿔주면 끝난다는 겁니다.
하지만 여기까지는 이미 as2가 익숙하신 개발자분들이나 js를 쓰던 분들은 아는 내용이기도 합니다.
그리고 굳이 레퍼런스에 나와있는 내용을 제가 설명할 필요도 없고요...
이 watch 에는 문제가 있습니다. 하나의 속성값에 하나의 핸들러 함수만 연결할 수 있는 것이지요...
그래서 이 녀석을 사용하려면 좀 손을 볼 필요가 있습니다.
http://scaleform.minarto.com/342 로 이어집니다