2014-12-21 3 views
0

게임 센터를 사용하여 Sprite Kit 멀티 플레이어 게임을 만들고 있습니다.이상한 GameKit 버그. GKLocalPlayer가 상대방을 반환합니다.

로컬 플레이어를 얻으려면 다음 코드를 사용하고 있습니다.

GKLocalPlayer.localPlayer() 

나는과 같이 플레이어 ID 및 별명처럼이 얻을 수있는 재료를 사용

GKLocalPlayer.localPlayer().playerID 
GKLocalPlayer.localPlayer().alias 

매우 간단합니다. 그러나 가장 이상한 일이 일어난다. 가끔 일치하는 동안 GKLocalPlayer.localPlayer()은 상대방 (즉, 다른 플레이어) 플레이어 ID와 별칭을 반환합니다. 상상할 수 있듯이, 이것은 모든 종류의 문제를 일으 킵니다.

일부 추가 정보

는 :
  • 예 나는 모든 인증 된 사용자.
  • 두 사용자가 서로 다른 계정으로 Game Center 샌드 박스 서버에 로그인했습니다.
  • 위에서 설명한 바와 같이 로컬 플레이어는 처음에는 정확합니다. 그러나 플레이어 간의 연결이 설정되고 데이터 패킷을 보내기 시작한 후 로컬 플레이어가 잘못된 사용자를 반환하는 경우가 있습니다. 그리고 앱이 재설정 될 때까지 잘못된 정보를 계속 반환합니다.
  • 몇 시간 동안 테스트 해 보았습니다. 나는 그것이 내가 아닌 것이 긍정적입니다. 사실, Apple이 알고있는 한 GKLocalPlayer를 프로그래밍 방식으로 변경할 수 없습니다.
  • 실제 기기에서 iOS 8을 실행 중입니다.

이 것이 알려진 문제입니까? 누구든지 추천 사항이 있습니까? 나는 정말 실망 스럽다. 아마도 GKLocalPlayer.localPlayer()를 호출하고 GKLocalPlayer.localPlayer()를 호출하여 로컬 플레이어에 액세스하는 대신 (이상한 버그가 발생하기 전에) 속성을 저장해 두는 것이 좋습니다. 하지만 다시 한 번 해결 방법이 될 것입니다.

편집 :

NSTimer .scheduledTimerWithTimeInterval(1.0, target: self, selector: "test", userInfo: nil, repeats: true) 
func test() { 
     println("\(GKLocalPlayer.localPlayer().playerID)") 
    } 

그리고 출력은 다음과 같이이다 :

내가 간단한 타이머과 같이하고 있는데,이 문제를 테스트하려면 (I 전체 선수를 보이는 아니에요 신분증). playerID가 어떻게 변하는 지 확인하십시오. 그리고 나는 그것이 실제로 상대방의 playerID로 바뀌고 있음을 확인했습니다. 별칭 등에 대해서도 마찬가지입니다.

G:43... 
G:43... 
G:43... 
G:43... 
G:43... 
G:43... 
G:84... 
G:84... 
G:84... 
G:84... 

답변

1

이 문제도 발생했습니다. 문제는 로컬 플레이어를 앞뒤로 통과시키고 있다는 것입니다. 따라서 로컬 플레이어가 직렬화되면 직렬화 된 후 전달 된 플레이어가 로컬 플레이어가됩니다.

displayName과 playerID가있는 내 자신의 플레이어 개체를 구현하여이 문제를 해결했습니다. 로컬 플레이어로부터 게스트 플레이어를 생성하고이를 사용하여 패스 할 수 있습니다. 로컬 플레이어를 그냥 지나치지 마십시오.

+0

동일한 작업을 수행해야했습니다. –