메뉴 건너뛰기

XEDITION

ANDROID

조회 수 672 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

게임에서 가장 중요한것 중 하나가 애니매이션 일텐데요. 여기서는 안드로이드의 애니매이션중에서 2D 스프아이트 애니메이션을 구현하는 방법을 알아보겠습니다. 여러 방법이 있지만 비트맵 하나를 리소스에 추가해서 정보를 코드에 직접 작정하는 방식으로 구현해 보겠습니다.

 

 

다음과 같이 연속적인 이미지를 이용해서 구현해 볼텐데요. 포토샵에 소질이 없어서 좀 허접 하더라도 이해해주세요^^; 

 

■ 이런 이미지가 있으면 전체를 한번에 그려주는 것이 아니라 프레임 하나씩 연속적으로 네개를 그려주면서 마치 움직이는 듯한 느낌을 주는 것입니다. 직접 해보면서 어떻게 작동하는지 알아보도록 할게요. 

 

■먼저 FrameWork패키지에 SpriteAnimation클래스를 만들고 지난 포스팅에서 했던 GraphicObject클래스를 상속 받겠습니다. 

 

■ 이렇게 상속을 받았기 때문에 기본적으로 Bitmap 멤버 변수가 있습니다. 이제 몇가지 멤버를 추가하겠습니다. 우선 현재 프레임에서 그려줄 범위 정보를 담을 Rect형 멤버 변수를 추가하고, 애니매이션의 초당 프레임(FPS : Frame Per Second) 정보를 담을 맴버 변수도 추가하겠습니다. 또한 시트의 개수를 담을 m_iFrames를 추가하겠습니다. 

 

 

■ 다음으로 추가할 변수는 현재의 프레임을 담을 변수 입니다. 이 변수는 시간이 지남에 따라 값이 증가하고, 그에 따라 그려지는 이미지도 바뀌게 됩니다.  그리고 프레임의 높이와 넓이를 담아줄 변수도 추가 하겠습니다. 

 

 

■ 이제 클래스의 생성자에서 변수들의 값을 초기화 하겠습니다. 그리고 인스턴스에 스프라이트 애니메이션 정보를 대입하는 InitSprigeData()메서드를 작성하겠습니다.

 

 

■ 데이터들을 초기화 하는 메서드까지 작성을 해봤는데요. 매개변수로 받은 값을 변수에 그대로 대입을 했습니다.  m_fps만 밀리초 계산을 위해서 약간의 수식이 들어갔네요. 이제 이 클래스를 게임뷰 클래스에서 인스턴스를 생성하고 초기화 하는 코드를 작성하겠습니다. 먼저 GameView클래스에서 이 클래스를 멤버로 선언을 하고 생성자에서 인스턴스화 합니다. 

 

 

■ 다음으로 SpriteAnimation클래스의 InitSpriteDate()메서드를 호출해서 이미지 파일에 대한 애니매이션 정보를 입력해줘야 합니다. 그리고 GameView클래스의 onDraw메서드에서 m_spr의 Draw메서드를 호출하게 합니다. 

 

■ 이제 컴파일 하고 실행을 해보겠습니다. 

실행을 해보면 이미지를 그냥 그렸을때와 똑같은 화면이 나타나는데요. 이것은 스프라이트 애니메이션 클래스의 Draw메서드를 재정의 하지 않아서 그렇습니다.

 

 

■ Draw메서드를 재정의 하겠습니다. 

 

 

 

■ 실행해 보면 메서드에서 정한 범위만큼의 한프레임만 나타납니다. 

 

 

■ 다음으로 업데이트 메서드를 만들어서 시간이 지남에 따라 그려야 하는 프레임을 바꾸는 부분을 작성하겠습니다시간의 흐름에 따라 그려주는 스프라이트 프레임에 변화를 주기 위해서 업데이트 메서드의 매개변수를 게임상의 시간으로 받습니다. 

 

 

■ 업데이트 메서드도 게임프레임 워크인 GameView클래스의 Update에서 불러와야 합니다. 그리고 현재의 시간 정보를 담을 long 형 변수를 추가하고 System.currentTimeMills메서드를 호출해서 현재 시간을 밀리초 단위로 구합니다. 

 

 

 

■ 마지막으로 SpriteAnimation 클래스 업데이트 메서드에서 그림을 그릴 때 들어가는 매개변수 값인 m_Rect 변수의 값을 새로 그려줄 프레임 값으로 교체하는 코드를 추가합니다. 

 

 

■ 실행을 해보면 애니매이션이 정상적으로 작동하는걸 확인 할 수 있습니다. 

손으로 잘라서 만든 이미지라 들쑥날쑥 하지만 제대로 작동하는건 확인이 되네요.

 

 

 

출처 http://kd3302.tistory.com/56

?

List of Articles
번호 제목 글쓴이 날짜 조회 수
64 [슈팅 게임 만들기] 11. 강좌가 늦어져 예제로 대신합니다 엘리후 2017.06.01 93
» 안드로이드 게임 만들기 SpriteAnimation 엘리후 2016.02.29 672
62 [안드로이드 어플 개발] 이동 애니메이션 (Translate Animation) 엘리후 2015.12.24 373
61 Multipart를 이용하여 파일+문자열 한꺼번에 전송하기 엘리후 2015.12.01 3140
60 How do I upload large files (10MB) in Android? 엘리후 2015.11.26 925
59 Upload Video from android to server? 엘리후 2015.11.26 266
58 안드로이드] Fragment 쉽게 사용하기 엘리후 2015.11.24 386
57 안드로이드(android) 다이얼로그(dialog) 종류별 구현 방법 엘리후 2015.11.11 431
56 ActionBar에 메뉴 넣기. 엘리후 2015.11.11 188
55 앱 통계를 내 사이트에서 수집하기 엘리후 2015.10.07 827
54 나인패치 (9patch) 이미지 만드는 방법 엘리후 2015.10.07 350
53 VOLLEY 라이브러리 엘리후 2015.10.02 539
52 안드로이드 나인패치 이미지 만들기 [나인패치 영역선택 및 수정] 엘리후 2015.09.25 879
51 안드로이드 Support Library Setup 엘리후 2015.09.25 444
50 안드로이드 Multipart 업로드 예제 엘리후 2015.09.23 8811
49 이클립스/Eclipse 메모리 Heap 영역 늘리기 엘리후 2015.09.13 263
48 [Android, Hybrid]openFileChooser 킷캣에서 동작하지 않는 문제( openFileChooser Kitkat bug ) 엘리후 2015.08.27 605
47 Android – WebView에서 input태그를 통한 파일 업로드하기 엘리후 2015.08.27 3627
46 WebView 컨트롤 엘리후 2015.08.27 445
45 안드로이드 동영상 파일 업로드 예제 엘리후 2015.08.25 1181
44 안드로이드 채팅 ui 만들기 관련 리스트뷰(ListView)의 layout_weight 옵션을 이용한 채팅 GUI 구현, 카카오 채팅 말풍선 엘리후 2015.08.21 27790
43 Android 간단한 로그인, 회원 가입 폼 만들기 for Mac (PHPMyAdmin 이용) 엘리후 2015.08.21 1962
42 안드로이드 프레임워크 프로그래밍 [시스템서비스 추가하기] 엘리후 2015.08.11 156
41 안드로이드에서 실행 시 발생하는 에러 엘리후 2015.08.10 164
40 안드로이드 ; 스크롤 뷰 엘리후 2015.08.09 1840
39 android Facebook SDK 3.0 로그인 및 포스팅 엘리후 2015.08.07 479
38 [android] 안드로이드 전역 변수 사용하기 android global variable 엘리후 2015.07.30 645
37 [Android] WebView를 사용할때 HttpClient를 이용한 Session 유지 엘리후 2015.07.29 5567
36 [MY_SQL] where절과 having절의 차이 엘리후 2015.07.27 246
35 [안드로이드 개발 강좌] 데이터베이스(DataBase) - DB 생성,저장,수정,삭제 엘리후 2015.07.21 939
Board Pagination Prev 1 2 3 Next
/ 3
위로