MyProjects/PuzzleGame

3. 동작 메커니즘 - HoleBlock - Queue 조작

GameCook 2018. 8. 2. 21:51

holeBlock 관련 클래스 다이어 그램

 

유저의 조작감과 관련된 내용으로 그룹으로 분리되어 떨어져있는 HoleBlock두개가 On 되었다는 표시가 되면 물체를 양쪽 어느 한 관문으로 

보내어 연결된 다른 HoleBlock으로 텔레포트시키는 것이 주 목적입니다. 이것을 구현하기 위해 큐 자료구조를 사용했습니다. 

 

기본 사항은 클릭과 활성화 변화 상태가 징검다리 식으로, 새로운 hole을 클릭 할 때마다 기존 클릭 된 두 곳에서 먼저 클릭된 것이 사라져야 합니다.

 

<일반적인 경우>

 

<기존 선택 재클릭>

 

<나중 선택된 곳 -> 같은 그룹 내 위치 변경 (큐 순서 변경 없음>

 

<이전 선택된 곳 -> 같은 그룹 내 위치 변경 (큐 순서 변경 있음) >

 

 

씬이 실행되고 초기화 과정 이후 유저의 플레이 조작 단계에서는 가비지컬렉터 유발을 최대한 억제하도록 하고 최적화 효율을 높이고자 하였습니다.

이를 위해 supervisor에서는 하위 controller에 대한 접근 방법으로 개별 인덱스(int 자료형) 값을 사용하며 

controller 역시 그룹내의 holeBlock에 접근 가능한 방법으로 인덱스(int 자료형)를 사용합니다. 

enqueue와 dequeue 가 이루어 질 때 메서드 내부에서 각 holeBlock 정보에 접근하고 정보를 교환하는 작업은 모두 int 인덱스를 통해 검색이 되며

Supervisor - Controller - holBlock 트리개념에 의하여 각 하위에 해당하는 활성 비활성 상태의 block 정보를 모두 탐색할 수 있기 때문에 

보다 빠르고 효율적인 반응을 기대할 수 있습니다.

 

hole을 클릭하면 이벤트로 결합된 holeContrller에 신호를 보냅니다. 이 컨트롤러들 끼리의 통신을 다시 상위개념인 Supervisor 클래스에서 관리합니다. 

 

 

그림에서의 경우처럼 그룹으로 분리된 두 영역의 Block이 하나씩 체크가 되면 -> (isSelected == true)  서로 링크로 연결된 것으로 간주되어 

물체가 해당 selected된 곳 중 어느 한곳에 도착 시  다른 한 곳으로 텔레포트 할 수 있는 조건이 성립합니다.