Archive for the ‘Personal’ Category.

s36 모집

http://cafe.naver.com/powerfl/39
자동가입이긴 합니다만 가입을 해야 글이 보이는 듯.

모집요강 및 신청은 저기서.. 더불어 파워플 홍보도 하고 ㅎㅎ

요즘 꽤나 기술적이지 않은 글을 올리는 듯한 느낌이 ^^

애니메이션에 대한 생각

제가 구현한 트위너의 추상층은 매우 복잡한 애니메이션을 손쉽게 기술할 수 있습니다.

예를 들어 alpha가 0인 bitmap만 모아 오른쪽 경계면으로 적당히 분포시켜라 등의 명령이 아래와 같이 처리됩니다.

CStween.SET( CStween.$
	.object( CSdoc.GET( this, '@*[alpha==0]') )
	.target( {x:'stage:width-60~stage:width'} )
	.ease( 'linear,circle,sine', '0.5~1.5' )
);

하지만 실제 세계의 애니메이션은 저렇지 않고 아래와 같은 복잡성을 다양하게 갖습니다.

Continue reading ‘애니메이션에 대한 생각’ »

ini로 view를 기술하기 프로젝트

ini는 야바위 스펙이 아니라 윈도우즈의 설정 등에 쓰이는 아주 범용적인 포멧으로 다음과 같은 기본적인 문법으로 되어있습니다.

  • []를 통해 항목을 선언한다.
  • =을 통해 항목과 값을 구분한다.
  • 개행을 통해 각 항목을 구분한다.
  • #을 통해 주석을 처리한다.

따라서 보통 아래와 같은 형태가 됩니다.

[category1] #회사부서
item1=디자인
item2=개발
item3=기획
#--------------------------------------------
[category2] #주인공수치
level=30
hp=50
power=110
speed=50

이러한 ini파일 방식의 기술은 xml에 비해 현격하게 작은 용량과 데이터 자체만 기술하기 때문에 메모장으로도 매우 손쉽게 작성할 수 있다는 잇점이 있습니다.

하지만 이보다 더 중요한 장점은 xml은 비개발자인 기획자나 컨텐츠 제작자, 디자이너에게 작성해달라고 했을 때 심한 거부반응을 불러오는 반면 같은 내용을 적당한 ini로 기술하여 채워달라고 하면 잘해준다는 점입니다.

개발적인 마인드가 전혀 없는 팀원들이 코어 개발과 상관없는 단순한  컨텐츠기술부분을 외부데이터로 처리해 줘야 하는 경우 현실적으로 디자이너나 기획자에게 xml을 가르치기보다는 그냥 ini를 전달하는 편이 훨씬 좋죠.

확장된 ini

사실 ini자체 스펙으로는 기술에 한계가 있어서 저는 자체적으로 다음과 같은 형태까지 확장을 시켰습니다.

배열을 기술하기

[data1:Array]
50
60
70

trace( $parsed.data1[0] ); //50

만약 대괄호가 한번도 나오지 않는다면 하나의 큰 배열로 인식한다.

50
60
70

trace( $parsed[0] ); //50

항목이 배열인 경우

[data1]
list1=50,60,70,80

trace( $parsed.data1.list1[0] ); //50

형을 기술할 수 있다.

[data1]
(int)list1=40
(Boolean)list2=true,false,true

trace( $parsed.data1.list2[0] === true ); //true

항목이 오브젝트인 경우

[data1]
(Object)position=x:3,y:5,z:50
trace( $parsed.data1.position.x ); //3

자식관계를 형성한다.

[item1]
list1=3

[item1.list1]
item=test1

[item1.list1.item]
item=test2

trace( $parsed.item1.list1.item ); //test1
trace( $parsed.item1.list1.item.item ); //test2

그래서 이것을 통해 간단하면서도 복잡한 데이터를 기술할 수 있게 되었습니다. 사실 그래서 저는 거의 xml과 e4x를 잘 쓰지 않고 ini를 즐겨쓰는 편입니다.

ini를 통한 designView의 기술

이걸 이용해서 완전히 view를 생성하는 부분을 외부 파일로 분리하여 런타임에 처리하려고 생각하고 있었습니다.

[login:view]
(Number)background:sprite=x:0,y:0,width:500,height:300 #간단히 기술되는경우
(Number)label1:text=x:10,y:10
(Number)input1:input=x:50,y:10,width:200,height:30,border:0xffffff
(Number)submit:sprite=x:200,y:100,width:200,height:50

[login.label1] #보다 복잡한 기술이 추가적으로 필요한 경우
(Boolean)embedFonts=true
font=go1
size=12
color=0x000000
text=아이디

[login.submit]
click=instance1.hnClick
add:bitmap=bitmapData:button1
add:text=text:아이디,color:0xffffff

물론 사람이 이걸 생성하게 할 생각은 없고 전용 툴을 하나 만들고 있는데 궁극적으로는 PSD를 저 코드로 자동변환해주는 거죠.
해서 디자이너가 레이어정리를 이쁘게 잘한 PSD를 넘겨주면 전용툴이 쫙 정리해서 view.ini 랑 관련된 에셋을 묶어서 하나의 swf로 만들어주는걸 생각하고 있습니다 ^^;

인자객체 표준 사용안

가변성이 요구되는 모든 메서드나 클래스는 결국 인자객체를 갖도록 전체 프레임웍을 조정 중입니다. 이러한 인자객체의 사용법에 혼동이 없도록 작은 규칙을 만들어 봅니다.

클래스 내의 인자객체 이용원칙

  • 하나의 클래스에 하나의 인자객체만 사용할 수 있다.
  • 인자객체는 직접 생성할 수 없다.
  • 인자객체를 갖는 클래스는 반드시 static변수를 통해 ARG 라는 이름으로 인자객체를 제공해야한다.

클래스 내 구현 샘플

static private var arg:CSArg = new CSArg( BScoreBlockNew.F );

static public function get ARG():CSArg{
	arg.clear();
	return arg;
}

public function CS( $arg:CSArg = null ){
	var param:Object;
	param = arg.data;
}

인자객체 작성원칙

  • 어떠한 클래스로부터도 상속받거나 의존하지 않는다.
  • internal var data:Object 를 반드시 제공한다.
  • internal function clear():void 를 반드시 제공한다.
  • 클래스의 이름은 반드시 인자객체를 이용할 클래스이름 + Arg 를 사용한다.

인자객체 구현 샘플

package core{

	final public class CSArg{

		internal var data:Object;

		public function CSArg( $blockNew:BScoreBlockNew ){
			if( $blockNew === null){
				throw Error( 'CSArg는 생성할 수 없습니다.');
			}
			clear();
		}
		internal function clear():void{
			data = {};
		}

		public function isSlave():CSArg{
			data.slave = true;
			return this;
		}
	}
}

근자에 반드시 개발해야겠다고 생각하는 것들 정리

일단 이러한 프로젝트의 완료로 보고 있는 기간은 올해입니다.

  1. URLLoader 기반의 통합로더.
  2. PV3D를 기반으로 하는 3D엔진
  3. pyramid3D 2.0
  4. selecter 2.0
  5. DDO 3.0
  6. CStext 2.0
  7. 이펙트 프레임웍
  8. CStween 2.0
  9. FPS기반의 프레임웍
  10. 벡터드로윙 API

딱 저 10개만 해결되면 제 인생은 매우 아름다워질 걸로 기대하고 있습니다. 아래 설명을 보시고 아무 프로젝트나 지원자 계시면 꼭 제게 메일이나 네이트온, 댓글로 연락주세요.
Continue reading ‘근자에 반드시 개발해야겠다고 생각하는 것들 정리’ »