`libpng error: CgBI: unhandled critical chunk` iOS에서 libpng 라이브러리를 사용할 때, 위와 같은 에러가 뜨면서 텍스쳐를 잘 불러오지 못하는 문제가 있다. 특이한 것은 시뮬레이터에서는 문제가 없고, 실기기에서만 에러가 발생한다는 점이다. 해결 방법은 Xcode Build Settings에서 "Remove Text Metadata From PNG Files" 옵션을 "No"로 변경하면 된다. 아마 libpng 라이브러리를 사용할 때 시뮬레이터에서는 OSX의 libpng를 바로 사용해서 위 옵션 여부가 영향을 주지 않지만, 실기기에서는 영향을 받아서 그런 것으로 추측된다.
이건 C#에 좀 더 가까운 내용.... C#에서는 기본적으로 EventArgs, EventHandler라는 클래스를 제공한다. 이 녀석을 활용해서 가독성 좋게 Event Driven Programming을 할 수 있다. 게임에서 라운드 개념을 도입한다고 생각해보자. 라운드가 증가될 때마다 오브젝트들이 변경되어야 할 것이다. 이걸 좀 예쁘게 구현하고 싶다.다양한 방법이 있겠지만 위에서 언급한 EventArgs 클래스, EventHandler 클래스를 이용한 방법으로 구현해보자. EventHandler는 List와 비슷한 방법으로 생성할 수 있다. List의 type에는 제한이 없지만 EventHandler에는 EventArgs 클래스만이 들어갈 수 있다. 즉, EventArgs 클래스를 상속받은 클래스를 ..
비행기 도그파이팅 게임을 만들다보면 적 위치에 맞춰서 표적 마크를 보여줘야 한다. 안 그러면 잘 안 보이니까.... 표적 마크가 적의 위치에 따라서 바뀌는걸 여러가지 방법으로 구현할 수 있다. 적 오브젝트의 자식으로 추가해두는 것이 한 가지 방법. 그러나 3D 객체가 자유자재로 움직이는 상황에서 그대로 2D UI가 유지되도록 하는 것은 귀찮기도 하고 또 효율도 별로라서 다른 방법을 생각했다. 필요한건 플레이어의 카메라와 적의 게임오브젝트, UI 정보. 이것들이 있으면 UI가 그려져야 할 위치를 계산할 수 있다. 나는 UI를 그리기 위해 NGUI를 사용하기로 했다. Camera의 WorldToViewport 행렬을 이용해서 Viewport 상에서의 위치를 계산하고 이것을 NGUI의 좌표계로 변환하는 것이다..
Unity에서 AssetBundle을 쓸 일이 생겼는데, 그 중에서도 특히 Scene AssetBundle에 관심이 생겨서 몇 가지 테스트를 해봤다. 원래 Unity에서 Scene을 로드할 때는 Application.LoadLevel을 통해서 하는데, 원래는 Build Setting에서 Scene을 추가해줘야 한다. 그런데 AssetBundle을 이용하여 Scene을 실행할 때는 어떻게 해야하는지에 대한 설명이 빈약하다. 보통 예제들을 보면 AssetBundle을 WWW를 통해 다운로드 받은 뒤, www.assetBundle.LoadAll()을 한다. 그런데 직접 테스트 해 본 결과, LoadAll을 하지 않아도 LoadLevel을 하는데 문제가 없다. Application.LoadLevel의 인자로 넣..
다중 해상도를 지원하는 것은 상당히 골치 아픈 일이다. 굉장히 많은 방법이 있겠지만 내가 나름대로 삽질을 거듭하면서 괜찮다 싶은 솔루션을 공유해보려고 한다. 나는 Design Resolution과 Resource Search Path, Content Scale Factor를 활용하기로 했다. 이 글에서는 이 속성들을 깔끔하게 잡는 법에 대해 설명하려고 한다. 나는 AppDelegate.cpp에서 Design Resolution을 재가공 해주는 방안을 선택했다. 왜 재가공 해주어야 하는가? 세상에는 정말 다양한 해상도의 기기들이 많다. 문제는 이 기기들의 종횡비도 제멋대로라는 것이다. 아이폰만 해도 960x640, 1136x640은 종횡비가 다르다. 거기다가 아이패드까지 생각하면 1024x768으로 큰 차..
최근 머리를 앓게 하는 문제는 바로 Multi resolution screen support이다. 검색해보면 Designed Resolution에 대한 분석글이 몇 개 있긴 한데 만족스럽게 설명이 되어있지 않았기도 하고, 생각을 정리할 필요도 있을 것 같아 포스팅을 결심하게 되었다. 모바일 세상은 굉장히 다양한 해상도가 공존하는 세상인데, 멋진 게임이라면 스케일링을 깔끔하게 해서 해상도가 달라도, 또 종횡비가 달라도 예쁘게 보여져야 하는게 인지상정이다. 문제는 내가 초보라서 그런지, 문제 해결 방법이 쉽게 떠오르지 않는다는 것이다!! 게다가 이 문제가 가장 크게 대두되는 부분이 바로 UI 배치이다. 게임에서 UI는 유저한테 첫번째로 보이는 부분이기 때문에 굉장히 중요하다. (너무 당연한거라서 말하고도 뻘..
진짜 엄청 열심히 자료를 찾아다녔는데, 오늘에서야 잘 작동하는 소스를 찾을 수 있었다. 내 역량을 키워서 직접 수식을 만들 수 있으면 참 좋겠지만, 시간이 부족하다보니;;; 얼른 역량을 키워야 하는데 슬프다. 이 문제를 궁금해 하는 사람이 굉장히 많을 것 같은데 의외로 솔루션이 잘 검색되지 않아서 당황했다. 나 같은 경우에 처음에는 4개 직선의 방정식을 활용하여 타일 좌표를 구하는 방식을 이용했다. (참고 : http://eirenehue.egloos.com/970017) 소스는 다음과 같다. (나 같은 경우 맵 사이즈는 20 * 20, 타일 사이즈는 64 * 32 였다.) bool decisionLineAndPosition( float slope, CCPoint p1, CCPoint p2 ) {// s..
Cocos2d-x는 라이브러리가 몇 가지 나눠져있다. 물리를 담당하는 libBox2D, libchipmunk, 사운드를 담당하는 libCocosDenshion, 기본 cocos2d-x인 libcocos2d, 확장 컴포넌트들이 있는 libExtension, (lua의 경우)스크립팅을 도와주는 liblua, 이 정도이다. 게임을 개발 할 때 만들려는 게임이 무엇인가에 따라 다른데, 보통 물리가 들어가는 게임이 아니라면 물리 라이브러리는 사용할 필요가 없는 라이브러리이다. 하지만 Cocos2d-x에서 프로젝트를 생성해 줄 때 기본으로 이 라이브러리를 넣어서 만들어준다. 그렇기 때문에 처음에 빌드를 할 때면 굳이 쓰지도 않을 라이브러리를 빌드하느라 많은 시간이 소요되게 된다. 물론 딱 처음에만 그렇긴 하지만. ..
보통 프로젝트를 진행할 때 Git이나 SVN과 같은 리비저닝 툴을 쓰기 마련이다. Cocos2d-x 같은 경우에는 Cocos2d-x의 홈 디렉토리에 projects 폴더를 생성하고, 그 안에 자신의 프로젝트 디렉토리를 위치시키면 알아서 cocos2d-x library들의 (윈도우기준)솔루션을 불러와서 잘 빌드할 수 있다. (폴더명을 projects라고 지은 이유는 project-creator 툴을 이용할 경우 projects 디렉토리를 생성하고 그 안에 프로젝트를 생성해주기 때문에 이 툴과 충돌을 일으키지 않게 하기 위함이다.) Lua binding을 이용해서 게임을 개발할 때 아무래도 C++ 단에서 지원해주는 것이 유용할 경우가 많기 때문에 자신의 커스텀 클래스를 함께 Binding해서 사용하게 된다...
- Total
- Today
- Yesterday