티스토리 뷰

Kinect

[Kinect 프로젝트] Soccer Goal

생각많은 소심남 2012. 8. 19. 23:11

오랜만에 휴가를 갔다오고 다시 글을 쓰고 있습니다. 뭐든지 휴식이 필요한 것 같습니다.


이번 포스트에서 해볼 내용은 축구 게임입니다. 마찬가지로 발에 대한 Skeleton을 활용해서 공이 충돌했을 때에 대한 이벤트로 날아가는 걸 구현하는 겁니다. 물론 이전에 다뤘던 내용을 토대로도 충분히 구현하실 수 있습니다만 하나하나씩 해보도록 하지요. 마찬가지로 프로젝트는 기존 프로젝트를 계속 활용하고 이미지는 다음 것을 다운받아서 프로젝트에 추가하시기 바랍니다.


Soccer.zip


이번에는 손이나 기존의 이미지는 다 필요없으니까 딱 위의 이미지에 대해서만 변수를 선언해줍니다. 그리고 기존것과 마찬가지로 충돌이벤트를 하기 위해서는 각 점에 대한 위치를 알아야 하겠지요. 다음과 같이 변수를 선언해줍니다.



당연히 이미지에 대한 호출을 LoadContent에서 해줍니다.



나머지 기타 설정은 이전 프로젝트와 동일합니다.



이제 오른발을 사용할 것이니까 기존 코드에서 오른손과 왼손을 정의했던 것을 지우고 오른발로 바꿔줍니다. 물론 position 속성을 이용해서 앞에서 선언한 위치를 이걸로 정의해주면 되겠지요.



이제 오른발에 대한 정보를 얻었습니다. 이제 남은 작업은 이 오른발에 아까 선언한 오른발 그림을 입혀주고 공을 차면 공이 날아가는 애니메이션만 구현하면 됩니다. 우선은 충돌이벤트부터 짜주는 것이 좋겠지요. 이전 포스트에서도 했었지만 대부분의 충돌이벤트는 보통 이미지에 맞는 사각형을 형성해서 Intersects라는 속성을 이용한다고 했습니다.

 그전에 앞서서 공을 찾는지 안 찾는지에 대한 판별을 해줘야 합니다. bool로 해주면 됩니다.



그리고 발 이미지와 공이미지에 맞는 사각형을 update 부분에 해주고 충돌했을때에 대한 조건문을 만들어줍니다.



자 이제는 차고 나서를 결정지어줘야 합니다. 차고 나서 어떤 동작이 있으면 좋을까요? 뻥하는 소리를 출력시켜도 좋고요. 무엇보다도 공이 날라가면 좋겠지요. 



그런데 위의 구문은 한계가 있습니다, 분명 공은 찬 방향과 반대방향으로 나아가야 합니다. 그런데 위의 구문처럼 짜면 어느 방향으로 차든 무조건 왼쪽으로 가게 됩니다. 그러면 어떻게 해야 될지 고민을 해봅시다.

 제가 생각하는 건 공의 위치와 발의 위치를 비교하는 겁니다. 만약 공의 위치보다 발의 위치가 왼쪽에 있을 경우에는 sx와 sy는 증가하는 방향으로 가야 될 것이고요. 그 반대로도 구현이 되어야 하겠지요.


마지막으로 draw에서 발과 공을 그려주면 됩니다.



그런데 이렇게 하고 실행시키면 문제가 있습니다. 바로 공의 위치가 정의가 안되서 초기에 안보인다는 겁니다. 그래서 딱 보이게끔 선언해줍니다. 



 결과는 다음과 같습니다.



실제로 발을 찬건데 좀 높이 차야 되네요. 사운드효과를 주려면 간단합니다. 음원을 하나 찾으면 되는데 무료 음원 하나 봅시다.



이걸 프로젝트에 추가시키고 선언 및 정의를 해줍니다.


그리고 LoadContent에서 기존에는 SpriteFont와 Texture2D만 사용했었는데 이번에는 SoundEffect라는 개체로 추가합니다.

참고로 파일이름이 너무 길어서 임의로 explode라는 이름을 주었습니다.

그리고 이제 어디서 재생을 해줄것인가를 생각하면 되는데 당연히 isKicked가 true가 되는 시점이 되겠지요. 거기서 그냥 play속성만 활성화시켜주면 됩니다.


자 결과를 다시한번 보겠습니다.


대역폭의 문제때문에 핀트가 살짝 안 맞는데 아무튼 실행해보면 정상적으로 폭발 소리가 납니다.


혹시 폭렬기관차라는 만화 보신적 있나요? 저도 그냥 지나가면서 본적 있는데 아마 주인공이 공을 차면 공이 기관차소리를 내면서 나간다는데 갑자기 그거 생각이 나네요. 여기까지였습니다.

https://dl.dropbox.com/u/96808368/Kinect/Lab-5A.zip

댓글