[안드로이드 게임 개발_1] 기초 다지기

화면에 이미지 띄우기

 

게임(2D) 화면은 무수히 많은 그림들로 이루어져 있습니다. 때문에 먼저 그림파일을 불러와서

 화면에 띄우는 것부터 해보겠습니다. 

 

먼저 프로젝트를 하나 생성해서 소스 코드를 수정해서 게임의 가장 기초적인 부분인 이미지를

띄워보겠습니다.

  위의 그림의 파일은 기본 액티비티의 소스코드 입니다. 액티비티는 모든 애플리케이션의 가장 중심이 되는 클래스입니다. 여기서는 "애플리케이션의 중심은 클래스이다" 정도만 알고 넘어가도록 하겠습니다. 

 

 

■ 화면의 기본 단위 View

위의 액티비티가 어플의 가장 기본이기는 하지만 실제로 화면에 보이는 것은 아니고, 그 안에 포함된 뷰(View)라는 것이 실제 화면에 보이는 것입니다. 보통 다른 어플을 만들때는 뷰에서 파생된 클래스만으로도 어느정도 개발이 가능합니다. 하지만 저는 게임 개발 공부에 목적이 있으므로 기본제공하는 파생클래스는 거의 사용하지 않을 것입니다. 

 

화면에 이미지를 띄우기 위해서는 뷰 클래스들의 최상단에 있는 View클래스르 상속받아서 액티비티에 추가해줘야 합니다. View를 상속받는 클래스를 하나 생성하도록 하겠습니다.

 

위의 그림과 같이 [패키지> new > class]를 선택해서 클래스를 만듭니다.

 

 

클래스 이름을 넣어주고, [superclass]라고 표시된 부분에는 상속받을 부모 클래스를 넣어주면 됩니다. 아래 그림처럼 [android.view.View]를 직접 적어줘도 되구요. 오른쪽에 있는[Browse...]를 클릭해서 선택하는것도 빠르고 편리합니다.

 

 

이렇게 클래스를 생성하면 view클래스를 상속받은 ImageView class가 생성됩니다. 이때 자동으로 생성된 클래스는 생성자가 없습니다. 다음과 같이 소스를 추가하고 화면에 그림을 그릴때 사용하는 메서드인 OnDraw메서드를 오버라이딩 해줍니다.

 

 

다음 단계로 BitmapFactory클래스로 화면에 나타나게 할 비트맵을 불러오는 과정이 필요합니다.

소스코드에서 이미지에 접근을 할려면 이미지를 프로젝트에 추가해줘야 합니다.

 

이미지 파일을 준비하고 이클립스를 실행할때 지정해주는 workspace폴더에 가보면 방금 생성한 클래스 폴더가 있을겁니다. Res/drawable-mdpi폴더에 그림파일을 옮겨놓고 이클립스의 프로젝트에서 [Refresh]를 눌러주면 이클립스의 익스플로러 윈도우에서 그림파일을 확인할 수 있습니다. 아니면 직접 드래그 해서 바로 이클립스의 폴더로 넣어버려도 됩니다.

 

참고- 리소스 이름은 식별자로 사용합니다. 따라서 이미지 파일을 포함한 모든 리소스 파일은 영문, 소문자, 숫자 0~9, 특수문자(_)를 제외한 문자가 포함되어 있으면 오류가 발생합니다.

 

이제 onDraw메서드에서 그림 파일을 불러오는 메서드를 알아보도록 하겠습니다.

 

▶ Bitmap bitmap = BitmapFactory.decodeResoruce(리소소, 리소스id);

 

그림을 불러오는 과정은 위와 같고, 다음으로 그림을 그리는 과정입니다.

onDraw 메서드의 매개변수로 넘어오는 Canvas에 그림을 그려주는 방법은 여러가지가 있습니다. 보편적으로 다음과 같은 형식을 사용합니다.

 

▶ canvas.drawBitmap(비트맵, x좌표, y좌표, 페인트값);

 

지금은 그림을 가공할 일이 없으니 null값을 넣어주고 코딩을 해보겠습니다.

 

다음과 같이 소스를 추가하고 실행을 시켜보면 AVD에 아무런 변화도 생기지 않습니다. 지금까지는 ImageView클래스를 만들기만 했지 실질적으로 사용하지는 않았기 때문입니다. 즉, 액티비티에서 이 클래스를 추가하는 다음과 같은 과정이 필요합니다.

 

▶ setContentView(화면에 표시할 부분);

 

액티비티 클래스의 소스코드를 다음과 같이 수정하고 실행을 해보겠습니다.

 

AVD에서 실행한 화면입니다. 가장 기초적인 화면에 그림을 띄우는 과정을 알아봤습니다.

 

 

 

 

 

 

Leave a comment
Your name *
Your PassWord *
Comment *
COMMENT