티스토리 뷰

Desktop 운영체제, 안드로이드 브라우저와 같은 다중 플랫폼을 타겟으로 삼을 수 있도록 했다. 각 플랫폼은 어플리케이션의 윈도우나 사용자의 입력, 파일시스템간의 상호작용, 오디오 재생 등의 설정에 관한 다른 매카니즘을 가지고 있다. 


백엔드(Backends)

libgdx 는 플랫폼별의 특성을 Intreface에 숨김으로써 차이를 추상화 시키도록 노력다. libgdx의 구현된 인터페이스(백엔드라 불리는)는 각 플랫폼들을 지원합니다. 어플리케이션 개발자는 직접적으로 백엔드에 연계되진 않지만 대신 인터페이스 개발을 한다..



Libgdx는 현재 4개의 백엔드를 지원한다.

Lwjgl : Lightweight Java Gaming Library. JNI 로 OpenGL과 OpenAL, 윈도우 툴킷 플랫폼을 감싸고 있다. 이 백엔드는 Windows, Linux, Mac OS X, 자바 런타임을 지원하고 OpenGL 1.5가 설치된 그래픽 카드를 지원한다.


Jogl : Jogl 1.1 로 빌드. OpenGL과 Swing을 감싼 JNI Wrapper 뿐만 아니라 Lwjg의  OpenAL을 연동시킨 다른 Wrapper. Windows, Linux, Mac OS X를 지원한다. Lwjgl 백엔드가 풀스크린을 지원하고 효율적으로 사용되어 지금은 더 선호된다.


Android : Android API로 빌드

HTML5 : GWT, SoundManager2와 업데이트된 GWT WebGL과 Quake 2 GWT port의 로컬 저장소 하에 빌드. 이 백엔드는 Java에서 순수 Javascript code로 컴파일 될 것이다. 최종 결과물은 크롬, 사파리, 파이어폭스나 최신 오페라 그외 WebGL을 지원하는 다른 브라우저에서 구동 될 수 있다. GWT와 Javasript 몇가지 제한되는 사항이 있으니 이 걸 봐라. http://libgdx.googlecode.com/svn/trunk/backends/gdx-backends-gwt/issues.txt


모듈(Modules)

libgdx 코어는 5가지 인터페이스로 구성되있다. 이 인터페이스 제공의 의미는 운영체제와의 상호작용이다. 각 백엔드는 이 인터페이스를 상속 받고 있다.


Application : 어플리케이션 구동과 윈도우 리사이징같은 어플리케이션 수위 이벤트에 관한 Client API를 알려준다.


Files : 플랫폼의 기본 파일 시스템을 나타낸다. 사용자 정의 파일 핸들 시스템의 상단에 파일 위치의 다른 타입을 이용하여 추상적인 개념을 제공한다.


Input : API Clients에 유저의 입력(마우스, 키보드, 터치, 가속 이벤트)을 알린다. 폴링과 이벤트 드리븐 방식 둘다 지원한다.


Audio : 효과음과 스트리밍 음악 뿐 아니라 PCM Audio 입출력을 위한 오디오 장치의 직접적인 접근 제공을 의미합니다.


Graphics : OpenGL ES 1.x 및 2.0을 (사용할 수 있었던) 제공합니다 또한 비디오 모드와 유사한 것을 질의 / 설정 할 수 있습니다.



시작 클래스

특화된 플랫폼 코드를 작성하는 것이 필요했는데 이걸 시작 클래스라고 부른다. 코드의 조각들은 플랫폼 백엔드 제공을 위한 어플리케이션 인터페이스를 상속 받아 구체화된 것으로 각 플랫폼을 주요 타겟으로 삼고 있다.  데스크탑은 Lwjgl 백엔드를 사용하여 다음 과같은 형태를 띄고 있다.


public class DesktopStarter {
   
public static void main(String[] argv) {
     
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
     
new LwjglApplication(new MyGame(), config);
   
}
}


안드로이드 시작 클래스는 다음과 같다.


public class AndroidStarter extends AndroidApplication {
   
public void onCreate(Bundle bundle) {
     
super.onCreate(bundle);
     
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
      initialize
(new MyGame(), config);
   
}
}


예를 들어 안드로이드 데스크탑 프로젝트인 이 두 클래스는 독립적으로 구성되어있다. 프로젝트 설정 페이지에서 이클립스를 위한 이 프로젝트의 레이아웃을 설명하고 있다.


실제 코드는 ApplicationListener 인터페이스를 상속받은 클래스에 위치 하고 있다.(이전 예제의 MyGame ). 이 클래스의 객체는 각각의 백엔드가 상속된 어플리케이션의 생성자에 전달됩니다. 그러면 응용프로그램에서는 적절한 시간에 어플리케이션 리스너의 메소드를 부르게 호출하게 됩니다.


시작클래스의 Application Configuration 자세한 내용을 봐라.


모듈 접근

모듈은 Gdx 클래스의 전역 필드를 통해 접근 할 수 있도록 만들어졌습니다. 이것은 효율적으로 전역 변수를 설정하고 다른 libgdx 모듈에 접근이 용이하도록 해줍니다. 여러가지 참조 하는 것을 전달하는 것과 관련한 어려움을 쉽게 하기 위해  일반적으로 나쁜 코딩 습관으로 간주하지만 우리는 모든 곳에서 자주 사용하는 이러한 메카니즘을 사용하기로 결정했다. 


오디오 모듈을 제어 하기 위한 간단한 예는 다음과 같다.

// creates a new AudioDevice to which 16-bit PCM samples can be written
AudioDevice audioDevice = Gdx.audio.newAudioDevice(44100, false);

 Gdx.audio는 어플리케이션 객체에 의해 어플리케이션 시작시 구현된 사항을 벡엔드 수행으로 참조한다. 다른 모듈들은 동일한 형태로 접근되어진다. 예를 들어 gdx.app은 어플리케이션을 받아올 때, Gdx.files는 파일 수행에 관한 접근을 위해 그외 등


When it comes to = about

'Game > LibGDX' 카테고리의 다른 글

08. 시작 클래스와 설정  (0) 2013.01.07
07. 라이프 사이클  (0) 2013.01.07
06. 어플리케이션 프레임워크  (0) 2013.01.07
05. 프로젝트 설정  (0) 2013.01.07
04. 준비단계  (0) 2013.01.07
03. 커뮤니티와 지원방향  (0) 2013.01.07
댓글
댓글쓰기 폼