2016-12-31 6 views
1

iOS 9에서 Apple은 방법을 GKTurnBasedMatchmakerViewControllerDelegate으로 폐지했습니다.GKLocalPlayerListener의 receivedTurnEventFor match를 사용할 때 turn 이벤트가 matchmaking 찾기의 결과인지를 결정하는 방법이 있습니까?

Apple의 지침은 func player(_ player: GKPlayer, receivedTurnEventFor match: GKTurnBasedMatch, didBecomeActive: Bool) 방법을 GKLocalPlayerListener으로 사용하는 것입니다.

  1. 사용자가 GKTurnBasedMatchmakerViewController 표시 + 도청 : 다음과 같은 시나리오 만 receivedTurnEventFor match 리드를 사용

    .

  2. 사용자 탭 Play Now과 게임 센터가 일치하는 것을 검색합니다.
  3. Game Center는 matchData (새로운 경기)으로 비어있는 경기를 표시하거나 진행중인 경기에 사용자를 배치하고 게임에 receivedTurnEventFor match을 통해이를 알립니다. 이 새로운 일치 (matchData를 사용하여)가 생성되었는지 확인하기에 충분 간단하지만 일치하는 모든 이벤트로 업데이트되고 일치 대 발견 된 경우

결정하는 방법이있는 것은 아니다 receivedTurnEventFor match을 통해 흐릅니다.

, 턴 이벤트가을 찾아내는 중매의 결과인지 확인하는 방법이

GKLocalPlayerListenerreceivedTurnEventFor match 방법을 사용하여이 :

내 질문은 이것이다?

답변

0

게임 센터가이 문제에 도움이 될 것이라고 생각하지 않습니다. 오버로드 된 receivedTurnEventForMatch 함수에 대한 또 다른 애매한 호출처럼 보입니다. 하지만, 나는 원래 참가자가 다른 참가자들보다 항상 먼저 경기를 보는 것을 알기 때문에 이것을 직접 관리 할 수 ​​있다고 생각합니다.

플레이어는 적어도 1 자동 게임 참가자와 함께 새로운 일치를 만듭니다 : 새를받을 때 참가자가 "일치"상태가되기 때문에이를 감지 할 수 있습니다 여기 사가지 경우가있는 것처럼

이 보이는 시합. 이 경우 발신자로 어떤 플레이어가 초대를 받았으며 자동 완성인지를 나타내는 데이터를 일치시킬 수 있습니다.

플레이어는 초대와 함께 새로운 경기를 만듭니다 :이 경우, 모든 참가자는 새로받은 경기에 출전해야합니다. 다시 말하지만 후속 플레이어가 읽을 수있는 일치 데이터에 플래그를 설정할 수 있습니다.

플레이어는 자동 완성 장치로 생성 된 일치 항목을 결합합니다. 2 명의 플레이어 만 지원하는 경우 player2가이 일치를 수신 할 때 두 playerID가 설정됩니다. 더 많은 것을 지원한다면, 일부 슬롯이 여전히 자동 설정되도록 설정할 수있는 (신뢰할 수없는) 기회가 있지만 그다지 도움이되지는 않습니다. 그러나 발신자가 어떤 플레이어가 초대되었거나 자동 슬롯 용 슬롯인지 나타내는 데이터를 플래그로 설정하면이 플레이어는 자신의 상태를 확인할 수 있습니다.

플레이어가 경기에 참가할 때 하나 이상의 초대장이 있습니다 : 이전 상황과 동일합니다. 합류하는 플레이어는 게임 센터에서 유용한 것을 결정할 수 없으며, 원래 플레이어가 경기에 추가 한 데이터에 의존합니다.

1

네 경우가 있습니다 1. 당신은 새로운 경기에 참여하고 2. 당신은 새로운 경기에 가입 (당신이 경기의 창조자) 차례와는 다른 플레이어의 차례 3 (당신은 경기를 발견) 당신은 Exising 경기에 참가하고 그것은 당신의 차례입니다 4. 기존 경기에 참가하면 다른 플레이어가 차례입니다. 사례 3과 4는 경기를 변경하거나 경기에 다시 참여할 때 발생할 수 있습니다.

어떤 경우가 발생하는지 확인하려면 match.currentPatriticantlastTurnDate 속성을 확인할 수 있습니다.

플레이어가 단지 새로운 일치를 생성하면

( receivedTurnEventFor는 매치 메이킹의 결과라고한다)를 match.participants[0].lastTurnDate은 전무하며 match.currentParticipant?.player?.playerIDGKLocalPlayer.localPlayer().playerID (케이스 1)와 동일하다.

기존 경기에 참여하는 경우 : match.participants[0].lastTurnDatenil하고 match.currentParticipant?.player?.playerIDGKLocalPlayer.localPlayer().playerID가 (새 경기에 합류하지만, 다른 플레이어가 차례에 - 경우 2) 동일하지

가 명확 경우 3과 4를 결정 수행을 모든 참가자의 lastTurnDate을 확인하고 로컬 플레이어와 현재 플레이어를 비교할 수 있습니다.