adsense



AndEngine 게임 개발 탐구생활 0~2.

0. 시작합니다


http://www.andengine.org/


2011년 후반에서 2012년 중반기까지, 안드로이드 환경에 적응하면서 처음 사용한 엔진이 이 AndEngine이었습니다.
뭐 그때는 엔진 원리도 잘 모르고, 피처폰에서 싱글스레드 게임 만들다가 갓 넘어와서 SurfaceView로 만드니 마느니 삽질하다가 엔진써야한다고 만들던거 버리고, 분석해 볼 시간도 없이 곧바로 응용 들어가서 아주 엉망진창으로 만들어댔죠..


제 안드엔진 적용 상용게임 첫 작품입니다.
중간에 너무 힘들어서 그냥 드롭할까도 많이 고민했는데 회사에 모가지 매인 놈이 그럴 수도 없고..

그러다 cocos2d-x로 넘어가서 꽤 편해졌습니다만(java나 c++같은 쪽 문제가 아니라 엔진의 사용 편의성에서) 미련이 남았달까.. 좀 더 제대로 이해해두고 싶다는 기분에 강좌라기 보단 자율 스터디 겸해서 기록도 남기고 게임 포팅도 해 보려고 합니다.


참고로, 현재 국내에서 AndEngine 관련해서 나와 있는 책은, 일전에도 소개한 '만들면서 배우는 AndEngine 게임 프로그래밍' 이 책 한 권 뿐으로,

처음엔 응용 범위가 너무 적고 엔진 기능도 한정적으로만 다뤄진지라 좀 실망했는데, 죽 보다 보니 구글링이랑 결합하면 나름 괜찮다 싶습니다.


1. 안드엔진 개발 준비

..는 참 쉬워졌죠.
요즘 안드SDK는 그냥 구글에서 검색해서 구글이 패키지로 올려놓은거 다운받아 풀기만 하면 sdk에서 이클립스까지 원스톱으로 끝.

안드엔진도 GitHub에서 패키지 받아다 압축풀고 이클립스에서 Import 한 다음, 새 프로젝트 생성해 Android Preference에서 라이브러리 포함 시켜주면 준비 완료입니다.

※ File -> Import -> andengine 압축을 풀은 폴더를 선택 -> ok
패키지 탐색기에서 에러마크가 뜨면 preference를 열어서 안드로이드 sdk를 설치된 버전(가급적 최신)으로 변경해주면 됩니다.

안드엔진 GitHub 링크
https://github.com/nicolasgramlich/AndEngine


2. 그럼 간단히 안드엔진 앱을 만들어보겠습니다.

andenginesample1.zip (예제 프로젝트 파일 1)

프로젝트를 하나 만들고,


다음과 같이 안드엔진을 라이브러리로 포함시킵니다.


(※예제를 다운받아 이클립스에서 Import 해 보면, src쪽에 에러가 날 수 있습니다.
프로젝트 properties를 열어 Android 항목을 선택해보면 라이브러리로 추가한 안드엔진 항목에 에러가 나 있을텐데, 이것을 선택, remove 하고 다시 Add를 눌러 이클립스에 불러놓은 안드엔진 라이브러리를 추가하면 됩니다.)


메인 액티비티에 BaseGameActivity를 상속합니다. 그럼 필수 오버라이드 항목으로

를 넣으라고 합니다.


초기화 함수의 실행 단계는
onCreateEngineOptions -> onCreateResources -> onCreateScene -> onPopulateScene
순서입니다.

프로젝트 생성 때 액티비티에 포함되어 있던 OnCreate와 onCreateOptionsMenu는 삭제합니다.
(OnCreate의 경우 BaseGameActivity에서 오버라이드하여 초기화 처리를 진행하고 있습니다. 때문에 메인액티비티에 OnCreate를 오버라이드할거라면 선두에 super를 반드시 남겨놓아야 합니다)

onCreateEngineOptions를 제외하고는 실행 완료 콜백함수를 불러 다음 순서로 넘겨줘야 합니다.

밝은 부분의 추가 코딩이 필요합니다.
onCreateEngineOptions() 와 onCreateScene()에 예제와 같이 내용을 채워 넣습니다.

이제 실행해 봅니다. 핑크색으로 가득 찬 화면이 나타나면 제대로 동작하고 있는 것입니다.

EngineOptions의 파라미터를 알아보겠습니다.

public EngineOptions(final boolean pFullscreen, final ScreenOrientation pScreenOrientation, final IResolutionPolicy pResolutionPolicy, final Camera pCamera)

boolean pFullscreen : 전체화면에 대응할 것인가 여부입니다.
false로 하면 Camera에서 지정한 실제 픽셀 사이즈로 표시됩니다만, false를 쓰는 경우는 아마 없겠지요.

ScreenOrientation pScreenOrientation : 화면 방향입니다.
ScreenOrientation.LANDSCAPE_FIXED가 가로 고정, PORTRAIT_FIXED가 세로 고정입니다. PORTRAIT_SENSOR와 LANDSCAPE_SENSOR는 기기 위치에 따라 180도 돌려서 볼 수도 있습니다.
※이거랑 별도로 액티비티에서 android:screenOrientation 옵션을 지정해줘야 합니다. 안 그러면 단말기 방향에 따라 화면이 돌아가면서 게임이 다시 시작됩니다. (안드로이드의 특성입니다)

IResolutionPolicy pResolutionPolicy : 화면 종횡비 옵션입니다.
RatioResolutionPolicy를 사용하면 고정 종횡비를, FillResolutionPolicy를 사용하면 LCD 사이즈를 무시하고 화면을 가득 채우게 됩니다.
RatioResolutionPolicy 사용 시, 종횡비가 안 맞으면 자동으로 레터박스 처리가 됩니다.

Camera pCamera : 엔진 옵션 설정 전에 생성한 카메라입니다.

openGL의 2D 게임 엔진은, 3D 좌표계에 평면상으로 놓인 텍스처를 카메라가 (거리에 따른 3D 왜곡을 무시하고) 찍어 보여주고 있는 개념입니다.
카메라의 기준 위치와 비추는 영역(픽셀 수)을 지정하는 것이 카메라 객체를 생성할 때의 파라미터입니다. 이 카메라를 이동시키거나 하여 게임에서 응용하는 방법도 있습니다.

이상의 내용은, 안드엔진 앱을 만들 때마다 기본적으로 Fix하고 시작하는 것이니, 템플릿 하나 만들어놓고 안드엔진 게임 프로젝트 생성하면 카피페해서 쓰는 것도 괜찮습니다.

화면(LCD) 사이즈 대응은 앞의 엔진 옵션을 통해 엔진이 알아서 해 줍니다. 또, 디폴트로 Back 키를 누르면 앱이 종료되도록 되어 있습니다.


원래 BaseGameActivity는 사용자(개발자)가 직접 다루는 부분은 아니고, SimpleBaseGameActivity라는 클래스가 제공되고 있습니다.

이것을 상속하면 오버라이드 함수는
onCreateEngineOptions, onCreateResources, onCreateScene의 세 개로 줄어들고,
각 단계에서 굳이 콜백을 해 줄 필요 없이 내부적으로 지정된 순서로 알아서 실행됩니다. (SimpleBaseGameActivity에 커서를 맞추고 F3을 눌러 소스를 보면, 2.에서 진행한 과정이 구현되어 있습니다)

그래서 안드엔진 게임 개발은 실제로는 SimpleBaseGameActivity로 시작합니다.
이름이 Simple이라고 해서 뭔가 기능이 제한되거나 그런 건 아닙니다. 구현이 심플해진거죠.
제시된 샘플에서, BaseGameActivity를 SimpleBaseGameActivity로 수정하고 거기 맞춰 재코딩하는 연습을 해 보셔도 좋겠습니다.


다음에는 안드엔진에서의 scene 관리에 대해 알아보겠습니다.


덧글

댓글 입력 영역


Books

Geek라이프

메가 드라이브 퍼펙트 카탈로그
마에다 히로유키 저/조기현 역

미소녀 일러스트 테크닉
B-은하, pen스케, 카와이 저/정유진 역

핵심강좌! Cocos2d-x
이재환 저

피규어의 교과서 레진 키트 & 도색 입문 편
후지타 시게토시 저/김정규 역
예스24 | 애드온2
일본서적 전문사이트 NEPIC