쎈과 서연이의 행방불명 난 이런 사람이야. 지금 이 시간에는 말이지…

125/100

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 방식으로 할 때 보다는 좀 더 논리적으로 개발을 할 수가 있게 된 것 같다.

이번 프로젝트 까지만 사용을 하고, 이번에 드러난 문제점들을 수정해서 앞으로 내가 만들 모든 작업물의 베이스로 삼아볼까 생각중이다.

덧글 (0) 엮인글 (0)

아직 덧글이 없습니다.


덧글 남기기


엮인글이 비활성 상태입니다.


Warning: fsockopen() [function.fsockopen]: unable to connect to twitter.com:80 (Connection timed out) in /home/ssen/www.ssen.name/web/wp/wp-includes/class-snoopy.php on line 1142