ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Libgdx - 소개 및 주요함수 정리
    개발/기술 2018. 6. 20. 20:52

    Libgdx는 오픈소스로 운영되는 게임엔진이다. 주로 2D용 게임을 개발하는데 사용하며 Mac과 Windows에서만 사용할 수 있는 Unity와는 다르게 Ubuntu 환경에서도 사용할 수 있어 개발하기 편리하고 개발한 코드가 Android, IOS, Desktop 환경에서도 동시에 사용 할 수 있는 cross platform 툴이다. 다만 Unity처럼 강력한 GUI 기능을 제공하지는 않고 직접 코드를 이용해서 일일이 그리는 원시적인 방법을 채택해 초심자들에겐 어려울 수 있으나 반대로 생각하면 무거운 기능을 줄이고 가능한 가볍게 만들었기 때문에 성능이 좋고 새로운 기능을 자신의 입맛에 맞게 추가 할 수 있어 능숙한 개발자들에겐 높은 자유도를 주기도 한다.


    공식 홈페이지에 올라온 libgdx 게임은 아래와 같은 것들이 있다. 아마 우리나라 사람들은 대부분 모르는 게임들이다


    링크를 클릭하면 더 많은 게임을 볼 수 있다. 


    처음 게임을 만들려고 할때는 간단히 Unity를 이용해서 만들려고 했으나 대부분의 개발을 Ubuntu로 하고 있는 현재 컴퓨터에 Unity를 설치할 수가 없고 하루 내일 하고 있는 윈도우 10 노트북에다가 설치할 수 없는 관계로 반강제적으로 libgdx를 채택했는데 생각보다 공부하는 과정은 재밌었다. 오랜만에 수학 공간 도형과 물리 공식을 써보니까 고등학교 추억도 새록새록 나는 것 같기도 하고 또 이론으로만 배웠던 것들을 실제로 시뮬레이션 해보니 신기하기도 했다. 역시 수학/물리 이론은 현실 세계를 반영한 것이었어!


    운좋게도 udacity에서 libgdx 강의가 있어 인터넷 블로그 돌아다니며 삽질하는 시간을 줄이고 체계적으로 배울 수 있었다. 강의는 무료인데 듣다보면 왠만한 유료 강의보다 훨씬 좋아서 돈내고 들어야할 것 같은 죄책감이 든다. 혹시나 libgdx에 대해서 공부하고 싶은 분은 꼭 이 강의를 통해 시작하길 바란다. libgdx를 이용해 점, 선을 그리는 것부터 똥피하기 게임을 만드는 것 까지 배울 수 있다. 강의 주소 링크 


    사진 속 아저씨 두분이 강사인데 오른쪽 아저씨는 매 class 마지막에 등장해 경험담만 풀어주고 수업은 왼쪽 아저씨가 다한다.


    공부한 걸 복습을 위해 Libgdx의 주요 함수들을 정리해보자. libgdx도 안드로이드의 Activity 처럼 기본적으로 채워줘야 하는 오버라이드 함수가 있다. 기본적으로 사용되는 ApplicationListener 인터페이스의 오버라이드 함수를 살펴보자.

        @Override
        public void create() {    }
        @Override
        public void resize(int width, int height) {    }
        @Override
        public void dispose() {    }
        @Override
        public void render() {    }
        @Override
        public void pause() {    }
        @Override
        public void resume() {   }

    각 함수의 성질은 안드로이드의 오버라이드 함수랑 비슷하다. 간단히 정리해보자.

    • create() : 이름에서도 짐작 할 수 있듯이 게임이 만들어 질 때 기본적으로 불리는 함수다. 안드로이드의 onCreate()와 같다. 클래스의 변수를 초기화하는데 사용된다.
    • resize(int width, int height) : 게임의 크기가 변할 때 실행되는 함수며 이때 전달 인자인 width와 height는 변경되는 게임 스크린의 크기다. 게임 개발을 안해본 사람들은 크기가 변하면 무슨일을 해야할 지 감이 안올 것이다. Libgdx에서는 주로 이 함수에 viewpoint라는 변수를 재정의 해주는데 이건 다음 포스트에서 정리해야겠다.
    • dispose(): 메모리가 부족할 때 불리는 함수다. 게임 실행중에 특정 변수가 불필요하게 메모리를 많이 잡고 있다면 dispose 함수 내에서 처리해주도록 하자.
    • render(): Libgdx에서 가장 중요한 함수다. 이 함수는 1초에 60번 불리며 실제로 화면을 그려주는 일을 담당한다. 60fps를 적어도 보장하려는 모양이다. 개발자는 이 함수에 자신의 그림을 그린다.
    • pause(): 안드로이드의 onPause()처럼 게임이 중간에 멈추거나 종료될 때 불리는 함수다.
    • resume(): 이것 또한 안드로이드의 onResume()처럼 Pause 상태에서 다시 시작 될 때 불리는 함수다.

    이 외에 인터페이스에서도 별도의 오버라이드 함수가 있으나 성격은 위의 함수를 크게 벗어나지 않는다. 이걸 보니까 플랫폼이 애초 객체 지향적 관점으로 설계됐다면 안드로이드든 libgdx든 어디든 통용되는 지식이 있는 것 같다. 공통된 감각을 가지고 있으면 어디든 적용하는건 어렵지 않을 것 같다.

    '개발 > 기술' 카테고리의 다른 글

    libgdx - Viewport  (0) 2018.06.22
    libgdx - Renderer  (0) 2018.06.22
    objdump 를 이용한 바이너리 깨보기  (0) 2018.05.29
    그래픽 소프트웨어, 라이브러리 정리  (0) 2018.05.06
    Yocto 내부 파일 분석  (1) 2016.10.02

    댓글

Designed by Tistory.