ModuleBase
기존에 컴포넌트 같은 것들을 만들고 addChild 를 시키면서 사용하는 것은 꽤나 귀찮은 문제들이었다. stage 의 감지도 그렇고, 애니메이션이 끝날때를 잡아내서 활성화 시켜주는 문제도 그렇고, pooling 을 시키기도 애매하고...
이래저래 컴포넌트들을 만들다가 이번에 역발상으로 parent 가 addChild 시키는 컨트롤이 아니라, 아싸리 child 에 parent 를 던져줘서 등록시키는 방식으로 모듈 기반을 바꿔줘봤다.
public class ModuleBase extends Sprite
{
private var _running : Boolean;
private var _constructed : Boolean;
public function construct(config : Object = null) : Boolean
{
if (_constructed) return false;
// 자원 생성
_constructed = true;
return true;
}
public function deconstruct() : Boolean
{
if (!_constructed) return false;
// 자원 파괴
_constructed = false;
return true;
}
public function setting(data : Object = null, config : Object = null) : void
{
// 상태 설정
// 이미 작동 중일 경우엔 변경되는 애니메이션을 뿌려준다.
if (_running) refresh();
}
public function register(parent : DisplayObjectContainer = null, index:int = -1) : Boolean
{
if (_running) return false;
_running = true;
// 작동을 시작시킴
// 이벤트 등록
return true;
}
public function deregister() : Boolean
{
if (!_running) return false;
_running = false;
// 작동을 중단시킴
// 이벤트 삭제
return true;
}
protected function refresh() : void
{
// 재설정 되는 애니메이션
}
protected function appear() : void
{
// 등장하는 애니메이션
}
protected function disappear() : void
{
// 퇴장 하는 애니메이션
}
public function get running() : Boolean
{
return _running;
}
public function get constructed() : Boolean
{
return _constructed;
}
}
대충 이래저래 고민을 하다보니 위와 같은 구조가 되어버렸다. 아직 다듬을 만한 구석이 많긴 하지만, 이번 작업동안에는 이 구조를 베이스로 해서 여러 구성요소들을 개발중이다.
대충 이 기반을 상속받은 컴포넌트들을 만드는데
var module:Module = new Module();
// 모듈의 구성요소들을 생성해준다.
module.construct();
// 모듈의 데이터 부분을 셋팅해준다.
module.setting({name:"xxx", age:17});
// 모듈을 서비스에 등록시켜서 작동시킨다.
// parent 인 this 를 던져주고, addChildAt 을 사용할 경우 -1 이외의 값을 넣어준다.
module.register(this, 10);
// 모듈을 등록해제 시켜준다.
module.deregister();
// 모듈의 구성요소들을 지워준다.
module.deconstruct();
위와 같은 식으로 진행이 되게된다.
pooling 의 경우는 pool 에서 construct 까지 시켜준 다음에 pool 에서 꺼내서 setting 과 register, deregister 를 반복시켜주는 구간이 확실해져서 좀 더 간단해진 느낌이 든다.
그리고, 대충... register 나 deregister 명령에 따라 지가 알아서 애니메이션 이후에 parent 에서 addChild, removeChild 작동을 해결하기 때문에, 애니메이션을 모듈화 시키는데 좀 더 편리한 것 같다. 그리고, 애니메이션에 의한 모듈들간에 순차적 등장이 필요한 경우에도 릴레이 방식으로 register 명령을 내려주면 되니... 뭐... 대충 예전에 addChild 방식으로 할 때 보다는 좀 더 논리적으로 개발을 할 수가 있게 된 것 같다.
이번 프로젝트 까지만 사용을 하고, 이번에 드러난 문제점들을 수정해서 앞으로 내가 만들 모든 작업물의 베이스로 삼아볼까 생각중이다.