2011-11-27 3 views
2

Android에서 간단한 게임을 개발 중이며 두 스프라이트 간의 충돌을 감지하고 제거하려고합니다. 코드가 어떻게 생겼는지에 대한 아이디어가 있지만 어디에 놓았는지 모릅니다. 그것은 ... 스프라이트가 화면상에서 움직이기 때문에,이 "이벤트"는 onTouchEvent 나 그와 비슷한 것이 아니라 언제든지 발생할 수 있습니다.언제든지 일어날 수있는 이벤트 코드를 어디에 둘까요?

방금 ​​완료했습니다. this 튜토리얼을 따르면 모든 코드를 찾을 수 있습니다. 이제 나는 그것을 바꾸려고 노력하고있다. 기본적으로 나는 2 종류의 스프라이트 (나쁜 스프레드와 좋은 스프레드)를 차별화하려고 노력하고 있으며 나쁜 스프라이트가 좋은 스프라이트에 닿으면 좋은 스프라이트가 죽는다.

+0

게임이 어떻게 움직이는가 ??? 당신은 게임 루프가 있습니까 ??? 장면을 렌더링하는 데 사용하는 코드를 게시하십시오. – confucius

답변

3

실제로 @ Nammari가 맞습니다. 엔진 내부에서 마이크로 회전을 시뮬레이션하는 스프라이트를 움직이는 루프가 있습니다. 모든 스프라이트는 속도가 빨라집니다.

이 루프 안에는 충돌을 테스트하고 불필요한 스프라이트를 제거하기 만하면됩니다.

모든 활동은 활동 자체와 분리 된 클래스에서 이루어져야합니다.

그럼에도 불구하고 질문에 더 많은 관심이 있습니다. 예를 들어 충돌 카운터가 증가하고 화면이 깜박이는 등의 충돌이 일어 났음을 활동에 알리고 싶을 때 더욱 흥미가 있습니다.

글쎄, 그건 명백한 질문이 아니에요. 실제로 이것을 어떻게 깔끔하고 깨끗한 방법으로하는지 궁금해하는 것이 좋습니다.

가장 좋은 대답은 소프트웨어 아키텍처와 같은 새로운 세상에 진입한다는 것입니다. ;) 네, 이제는 더 이상 "코딩"에 관한 것이 아니라 깨끗한 방법 (그리고 아름다움과 예술이지만 실제로는 더 철학적 인 문제 일 수 있습니다)에 관한 것입니다. 이 경우

, 당신은 적당한 장소에 배치되는 관찰 관찰자 디자인 패턴을 어떻게해야하나요 :

  • 게임 엔진 (스프라이트를 이동 "규칙"을 알고 책임이있는 클래스)는이되고있다 이벤트 소스
  • "게임 수신기"에 대한 인터페이스를 정의해야합니다.이 단계에서 충돌이 감지되었습니다.
  • 엔진에는 강력한 캡슐화와 청취자를 추가 및 제거하는 두 가지 공용 메소드가있는 리스너 목록이 있어야합니다.
  • 또한 이벤트를 발생시키는 개인/보호 된 메소드가 있어야합니다. 등록 된 모든 리스너를 반복하고 "충돌 감지 됨"메소드를 호출합니다.
  • 다음보기에서 작은 내부 클래스를 만들고 수신기 인터페이스를 구현하십시오. 그것을 엔진 사이에 설치하고 등록하십시오.

기본 아이디어입니다. Here은 그 모든 것에 대한 훌륭한 소개 용 예입니다.

관련 문제