[안드로이드 게임 만들기] 미사일 발사
▣ 안드로이드 게임 만들기 |
■ 지금까지는 플레이어와 적의 등장과 움직임 등을 만들어 봤습니다. 발사하는 과정을 진행해 보겠습니다.
■ 디자인이 허접해도 이해해 주세요. ㅎㅎ
그리고 지난 포스팅까지는 비행기를 움직일때 키보드를 움직이는 과정으로 진행했었는데요. 요즘 스마트폰은 키패드가 없잖아요. 그래서 게임들을 보면 터치하고 움직이면 손가락을 따라서 비행기가 움직이면서 미사일은 계속 발사가 되는데요. 여기서도 그렇게 만들어보겠습니다. 그런데 제가 아직 실력이 부족해서 처음에 터치를 했을때 비행기의 처음위치에서 움직이게 구현하는걸 아직 해결을 못했네요. 그러니까 지금 소스는 화면의 위쪽을 터치를 하면 비행기가 그 위치로 따라와 버립니다.ㅠ.ㅠ;
그 과정은 해결하는데로 다시 수정하기로 할게요. 혹시 조언 해주실분 계시면 언제든지 환영합니다^^ 일단 소스를 한번 보겠습니다.
■ 위와 같이 처음 좌표는 플레이어의 등장 좌표로 했다가 터치를 해서 움직이면 따라오게 할려고 이벤트 좌표로 설정을 했는데요. 처음에 비행기가 등장하는 지점을 터치를 하면 문제가 없는데....전혀 다른곳을 터치하면 그 지점이 좌표에 반영이 되서 비행기가 바로 그 위치로 따라와 버립니다.ㅠ.ㅠ 일단 비행기를 바로 터치해서 움직이면 문제가 없으니 차후에 해결하기도 하고, 해결방법 조언 언제든지 환영합니다^^
■ 그럼 발사하는 과정을 진행해 보겠습니다. 미사일은 플레이어도 발사하지만 적도 발사하기 때문에 이들이 각가 상속받을 슈퍼 클래스를 생성하도록 하겠습니다. 미사일도 그래픽이기 때문에 GraphicObject클래스를 상속받아서 만들겠습니다.
■ 충돌하는 과정은 조금 미루구요. 일단 눈에 보이게 하고 앞으로 전진하는 과정을 진행해보겠습니다. 허접하지만 포토샵으로 만들어서 drawable폴더에 넣고 missie로 저장을 했습니다.
■ 제일 먼저 플레이어가 발사할 것들을 만들어 보도록 하겠습니다.
■ 위의 소스에서 매개변수로 받는 것은 생성되는 위치입니다. 앞(위)쪽으로 움직이기 위해서 y값을 5씩 감소하도록 하였습니다. 미사일도 화면에 엄청나게 나타나게 될거니까 적과 마찬가지로 ArrayList로 관리하겠습니다.
■ 생성되면 리스트에 담아서 관리하게 됩니다. 다음으로 눈에 보이게 하는 Draw 작업을 해줍니다.
■ 이제 터치했을때 발사되는 과정을 살펴보겠습니다. 다음 코드는 플레이어를 그려주는 원점 좌표를 미사일 생성자의 매개변수로 넘겨주는 과정입니다. 그리고 터치하고 있으면 계속 만들어지는 걸 막기 위해서 1초 간격으로 발사가 되도록 설정을 했습니다.
■ 앞에서 위로 움직이게 하기 위해서 y값을 감소시켰는데요. 이거를 업데이트 해주면 y값이 줄면서 위로 움직이는 효과가 됩니다. GameState 클래스의 Update()메서드로 이동을 해서 프레임마다 플레이어의 리스트에 있는 모든 미사일의 Update메서드가 호출될수 있도록 추가해줍니다.
■ 이제 실행을 해보면 발사되어 앞쪽으로 움직이게 되는데요. 여기서 문제가 하나 발생합니다. 너무 많은 적과 미사일이 만들어지다 보니까 어플이 다운되는 현상이 나타납니다.
■ 이런 현상은 화면에서 빠져나간 적과 미사일들이 삭제가 안되서 그런겁니다. 화면에서 사라진 것들을 삭제하는 과정을 살펴보도록 하겠습니다. 슈퍼 클래스에 멤버 변수와 상수를 추가해서 관리하도록 하겠습니다.
■ 이제 각각 움직이는 역할을 하는 메서드로 이동을 해서 화면을 벗어나면 state변수값을 STATE_OUT으로 바꿔서 상태 변경을 설정하도록 하겠습니다. 미사일은 Update()메서드이고, 적은 Move()메서드 입니다.
■ 이제 state변수로 객체가 화면 밖으로 나갔는지 체크를 해 볼수 있습니다. GameState클래스의 업데이트 메서드에서 이것들이 밖으로 나가면 리스트에서 제거하도록 하겠습니다.
■ 이제 다운이 되지 않네요. 다음에는 적의 미사일을 셋팅하고 충돌하는 과정을 진행해 보겠습니다.