45. 러너 게임으로 변경

이번 시간에는 현재 게임을 러너 게임으로 변경해 보겠습니다. 방법은 매우 간단한데, 항상 linear velocity X 값을 적용 시켜 주면 됩니다.

createUpdateHandler() 메서드의 onUpdate() 메서드 안에 makeRunnerGame() 가 실행되도록 작성해 줍니다.

makeRunnerGame() 메서드 안에 플레이어 바디에 linear velocity x 설정해 주고 게임을 실행시켜 주면 플레이어가 항상 오른쪽으로 달리는 것을 확인하 실 수 있습니다.

안드로이드 스튜디오 소스

완성된 게임(Hammer King)

44. 에너지 바 구현하기

이번 시간에는 플레이어의 에너지를 보여 주는 에너지 바를 구현해 보겠습니다.

먼저 관련 변수를 선언해 줍니다.

callController() 메서드 안에 health bar와 에너지를 표시할 하트 등의 sprite를 HUD에 붙여 줍니다.

createCollision() 메서드 안에 플레이어와 적의 충돌을 감지할 수 있도록 위와 같이 작성해 줍니다.

에너지 바가 항상 업데이트 되도록 createUpdateHandler() 메서드의 onUpdate() 안에 updateHealthBar() 메서드가 실행 되도록 작성해 줍니다.

플레이어의 에너지에 따라 하트 수를 다르게 보여줘서 에너지를 나타낼 수 있도록 위와 같이 작성했습니다.

게임을 실행해 보면 왼쪽 상단에 위와 같이 에너지 바가 보여 지는 것을 확인하실 수 있습니다.

안드로이드 스튜디오 소스

완성된 게임(Hammer King)

43. 적 무찌르기

공격을 통해 적을 무찌를 수 있도록 구현해 보겠습니다.

createCollision() 메서드 안에 적과 무기의 충돌에 대한 내용을 작성해 줍니다.

적과 플레이어의 무기가 충돌시 항상 적과 무기가 사라질 수 있도록 createUpdateHandler() 메서드의 onUpdate()안에 destroryGameObject() 메서드를 이용해 충돌한 적과 무기를 제거해 줍니다.

안드로이드 스튜디오 소스

완성된 게임(Hammer King)

42. 적에게 AI 부여하기

이번 시간에는 적에게 AI를 부여해 능동적으로 움직이게 만들어 보겠습니다.

플레이어와 적의 거리가 가까우면 적이 움직이게 하기 위해 먼저 플레이어와 적의 거리를 계산하는 getDistance() 메서드를 위와 같이 작성해 줍니다.

위에서 만든 getDistance() 메서드를 이용해 적와 플레이어가 특정 거리보다 가까우면 doAIActions() 메서드가 실행되도록 작성해 줍니다.

적이할 행동을 doAIActions() 메서드 안에 작성해 줍니다.

적이 항상 AI를 가질 수 있도록 createUpdateHandler() 메서드의 onUpdate() 안에 doAICalculations()가 실행되도록 작성해 줍니다.

안드로이드 스튜디오 소스

완성된 게임(Hammer King)

41. 적 등장 시키기

타일 맵에 벽 추가하는 것과 유사하게 창문이 있는 곳과 문이 있는 곳에 오브젝트를 추가하고 그곳에 적이 생성되도록 만들어 주겠습니다.

loadObject() 안에 window와 door 오브젝트에 적을 생성 시키는 loadEnemiesFromObjects() 메서드를 실행되게 합니다.

캐릭터 생성과 유사하게 loadEnemiesFromObjects() 메서드를 작성하고 showEnemy() 메서드가 실행되도록 작성해 줍니다.

마지막으로 showEnemy() 메서드를 위와 같이 작성해 줍니다.

게임을 실행해 주면 위와 같이 적들이 화면에 보여 집니다.

안드로이드 스튜디오 소스

완성된 게임(Hammer King)

40. 화면 이동하기

이번 시간에는 카메라가 캐릭터를 따라 움직이게 만드는 방법에 대해 알려 드리겠습니다. 소스에는 여러 애니매이션을 구현할 때 이미 적용해 놓았는데 이제야 설명해 드립니다.

AndEngine의 카메라는 여러 가지가 있는데 이제까지 사용한 카메라는 일반적인 Camera 클래서 였는데, 화면 이동을 위해 SmoothCamera를 사용하겠습니다.

onCreateEngineOptions() 메서드 안에 내용을 SmoothCamera에 맞게 수정해 줍니다.

onCreateScene() 메서드 안에 카메라의 바운드를 타일맵으로 한정해 주고, 카메라가 플레이어를 따라 다니도록 수정해 줍니다.

안드로이드 스튜디오 소스

완성된 게임(Hammer King)

39. 공격 구현하기(디테일 설정)

이번 시간에는 지난 시간에 이어 공격에 관해 디테일하게 설정해 주겠습니다.

피격 범위가 공격 후에 사라지게 하기 위해 destroyGameObject() 메서드를 만들어 줍니다.

createUpdateHandler() 메서드 안에 적이 무기에 안 맞았을 때 weapon object가 메모리에서 해제되도록 위와 같이 작성해 줍니다.

피격 범위가 정상적으로 사라지는 것이 확인되면 피격 범위는 더이상 화면에 보이지 않도록 설정해 줍니다.

안드로이드 스튜디오 소스

완성된 게임(Hammer King)

38. 공격 구현하기

이번 시간에는 공격 버튼을 추가하고 공격이 가능하도록 수정하겠습니다. 이동하면서 공격이나 점프가 가능하게 하려면 멀티 터치가 가능하도록 게임 옵션을 수정해 주어야 합니다.

onCreateEngineOptions() 메서드 안에 위와 같이 작성해 주면 멀티 터치가 가능해 집니다.

메모리 해제에 사용하기 위해 공격을 카운팅할 수 있은 int를 선언해 줍니다.

무기의 Category bit와 Mask bit를 작성해 줍니다.

점프 버튼과 같은 방법으로 공격 버튼을 만들고 눌렀을 때 attackPlayer() 메서드가 실행되도록 작성해 줍니다.

attackPlayer() 메서드 실행시 공격 애니매이션 스프라이트를 보여주고 무기 스프라이트가 나타나도록 작성해 줍니다.

게임을 실행해 공격 버튼을 눌러 주면 공격 애니매이션 재생되면서 위와 같이 붉은 사각형이 생기는데, 여기가 적의 피격 범위가 됩니다. 나중에 이 빨간색은 보이지 않게 만들고, 0.2초(공격 애니매이션 재생 시간) 후에는 메모리에서 사라지도록 만들 예정입니다.

안드로이드 스튜디오 소스

완성된 게임(Hammer King)

37. 점프 하기

이번 시간에는 점프 버튼을 추가하고, 버튼을 누르면 캐릭터가 점프하게 만들어 보겠습니다.

점프 버튼을 붙일 HUD를 선언해 줍니다.(HUD에 붙여야 캐릭터가 움직여 화면이 바뀌더라도 원래 위치에 그대로 있습니다. 나중에 사용할 캐릭터 체력바, 공격 버튼, 점수표시 등도 HUD에 붙여줄 것입니다.)

점프를 위해 필요한 값들(착지 상태, 점프시키는 충격량, 충돌 물체 이름) 선언

onCreateScene() 메서드 안에 createCollision() 메서드 실행

캐릭터 스프라이트와 벽이 충돌하면 플레이어는 착지한 것으로 정의해 줍니다.

callController() 메서드 안에 점프 버튼을 만들어 줍니다.

점프 버튼 클릭시 y방향으로 impulse를 적용해 주면 캐릭터가 점프하게 됩니다.

안드로이드 스튜디오 소스

완성된 게임(Hammer King)

36. 캐릭터에 여러 애니매이션 적용

이번 시간에는 캐릭터에 여러 애니매이션을 적용하는 방법에 대해 알려 드리겠습니다. 이전 시간까지 캐릭터는 오른쪽만 바라보고 있기 때문에 왼쪽으로 움직이면 문워크(?)로 움직였습니다.

먼저 왼쪽으로 달리는 애니메이션 스프라이트를 추가해 줍니다.

findShape() 메서드로 왼쪽으로 달리는 스프라이트를 정의해 줍니다.

showPlayer() 메서드에 왼쪽으로 달리는 애니매이션 스프라이트를 정의해 주고 오른쪽 달리기와 동일하게 작성후 setFlippedHorizontal() 메서드를 이용해 좌우를 반전 시켜 사용합니다.

바디는 오른쪽 달리기와 같은 바디를 사용하고 나머지는 오른쪽 달리기와 동일하게 작성합니다. 왼쪽으로 달릴 때만 보여 지도록 일단은 애니메이션 스프라이트를 보이지 않게 해줍니다.

컨트롤러가 왼쪽일 때 왼쪽 달리기 애니매이션 스프라이트를 사용하게 해줍니다.

이제 캐릭터가 왼쪽으로 달릴 수 있게 되었습니다. 여러 애니매이션 스프라이트를 붙여 놓고 필요할 때 보여주는 방식으로 구현해 봤는데 이 내용은 책에 없어서 제가 혼자서 생각한 것이라 더 좋은 방법 알고 있는 분 계시면 저에게 좀 알려주세요!

안드로이드 스튜디오 소스

완성된 게임(Hammer King)