Monday, December 2, 2013

Parser에서 신택스 트리를 반드시 작성해야 하는가?

Some parsers put out syntax trees as an intermediate data structure, rather than atom strings.

강제는 아님. 나는 꼭 만들어야 하는 줄 알았는데... 태균이 말이 맞았다.

Wednesday, November 13, 2013

NGUI의 UICenterOnChild 동작 원리

재밌는 방식으로 구성되어 있어 문서로 정리해 본다.

UICenterOnChild는 스크립트 콤포넌트로 추가되면 Draggable Object들을 화면 가운데로 정렬 하는데 이 정렬을 위해서 드래그가 끝났을 때 코드가 실행된다. UIDraggablePanel의 소스를 살펴 보면 UICenterOnChild와 연결된 부분은 전혀 없고

public OnDragFinished onDragFinished;

델리게이트 함수만 호출한다. 그런데 재밌는 점은 코드 어디에도 onDragFinished를 설정하는 부분이 없다는 점이다. 보통은 호출자에서 호출되는 부분의 함수를 연결하는데 NGUI는 그렇게 하지 않았다.

아무튼 onDragFinished가 연결되어 있다면 (null이 아니라면) 함수를 호출한다. 이는 다음과 같이 연결된다.

UICenterOnChild가 처음에 실행되면 OnEnable()가 호출되는데 여기서 Recenter()를 호출한다. Recenter는 OnDragFinished()가 호출될 때도 호출이 되는데 델리게이트를 연결하는 부분과 실제로 Center에 오브젝트를 정렬하는 기능 2개가 하나에 들어가 있다. (그래서 헷갈린다. 좋은 설계는 아니다.)

Recenter의 내부에 다음과 같은 코드가 있다.

---
if (mDrag == null)
{
mDrag = NGUITools.FindInParents<UIDraggablePanel>(gameObject);

if (mDrag == null)
{
Debug.LogWarning(GetType() + " requires " + typeof(UIDraggablePanel) + " on a parent object in order to work", this);
enabled = false;
return;
}
else
{
mDrag.onDragFinished = OnDragFinished;

if (mDrag.horizontalScrollBar != null)
mDrag.horizontalScrollBar.onDragFinished = OnDragFinished;

if (mDrag.verticalScrollBar != null)
mDrag.verticalScrollBar.onDragFinished = OnDragFinished;
}
}
if (mDrag.panel == null) return;

---

이 부분이 델리게이트를 연결하는 부분이ㅐ다. NGUITools의 FindINParents함수를 호출해서 현재 gameobject의 부모에 오브젝트를 가지고 온다. (그것은 UIDraggablePanel이 된다.)

그리고 mDrag의 onDragFinished에 현재 UICenterOnChild의 OnDragFinished 델리게이트를 연결한다. 이렇게 함으로써 UIDraggablePanel에서 드래그가 끝났을 때 UICenterOnChild의 OnDragFinished를 호출하고 여기서 오브젝트를 가운데로 정렬하는 로직이 실행된다.


끝.

Wednesday, October 23, 2013

프로젝트 아나키 NDK설정

프로젝트 아나키는 하복(Havok)에서 공개한 게임 엔진이며 안드로이드 예제를 실행하려는데 자꾸 NDK 설정 오류가 났다. NDK경로도 제대로 설정하고 Android SDK의 경로도 제대로 설정했는데 자꾸 오류가 나서 알아보니... x86용 NDK만 지원한단다...;

아직 64비트 버전은 돌아가지 않으므로 NDK를 다운로드 받을 때 x86용으로 받고 예제를 컴파일하면 실행 될 것이다.


Sunday, April 14, 2013

git 새로운 프로젝트 만들 때

항상 헷갈려서 메모 겸 적어 본다.

우선 디렉토리를 먼저 만든다.

mkdir testProject

그리고 testProject안에 들어가서 다음과 같이

git init으로 empty를 만든다. 그리고


cd .git

다음에

git --bare init

하자.

윈도우 환경변수 HOME등록

cygwin이 설치 되어 있고 윈도우 환경 변수에 HOME을 다음과 같이

/home/progc

하면 git사용할 때 이 폴더로 설정된다.


Tuesday, April 9, 2013

어스틴에서 개최했던 SXSW 사진들입니다.


호텔에 가면서 찍은 사진

LA공항에서 먹었던 점심... 맛은... 그냥...

월마트에 있던 SXSW광고

어메리칸 에어라인... 비행기는 대한항공/아시아나가 짱임.


게이밍 엑스포 입구


제품보다... 부스 아가씨가 이뻤던 곳

아기자기한 우리 회사 부스~

하얏트 호텔에서 아침

게임 설명 중...

인터뷰 중...

우리 회사 동영상을 10번 이상 반복으로 보던 아이들(그래서 나중에 대표님이 팔라독 인형 줬음 ㅋ)

트레이트 쇼 크기는 킨텍스 정도였다. 꽤나 컸음.

하얏트 호텔 로비에서 찍은 사진

멋졌음

어스틴 음식들이 너무 짜서 도저히 안맞았는데 초밥은 굳

마인드스톰을 사겠다는 의지가 강했으나... 실패



다리밑에 박쥐가 살아서 유명하다는 다리

깨알같은 페이즈캣 대표님




끝!

1년 정도 영어 안하다가 SXSW가서 영어 하는 바람에 처음에는 다소 버벅였지만 이내 적응해서 무사히 쇼를 끝낼 수 있었습니다. 참가 업체로서 쇼에 가는 바람에 다른 업체들이나 세션들은 제대로 보고/듣고 할 수 없었지만... 일단 그냥 무조건 열심히 했었습니다. :)

이상입니다.

Task in UnrealEngine

 https://www.youtube.com/watch?v=1lBadANnJaw