Ios 游戏中心结果公告
我正在做一个回合制游戏。。。传输的唯一信息是球员的得分以及是否发送了回合 当下一个玩家接到回合时。数据存储在“scoreToBeat”中,turnSent=1。然后轮到玩家。之后游戏结束,因为turnSent=1,所以被调用。我使用了Ray Wenderlich在上的基于回合的教程 在他的情况下,比赛结束,平局。这样地。。。我似乎无法用它来告诉那个迷路的人Ios 游戏中心结果公告,ios,game-center,Ios,Game Center,我正在做一个回合制游戏。。。传输的唯一信息是球员的得分以及是否发送了回合 当下一个玩家接到回合时。数据存储在“scoreToBeat”中,turnSent=1。然后轮到玩家。之后游戏结束,因为turnSent=1,所以被调用。我使用了Ray Wenderlich在上的基于回合的教程 在他的情况下,比赛结束,平局。这样地。。。我似乎无法用它来告诉那个迷路的人 for (GKTurnBasedParticipant *part in currentMatch.participants) {
for (GKTurnBasedParticipant *part in currentMatch.participants) {
part.matchOutcome = GKTurnBasedMatchOutcomeTied;
}
我似乎无法让它向失败者展示它总是显示出胜利。这是我最近的一次尝试。。。顺便说一句,比赛中正好有两名球员。。。任何想法都将不胜感激
for (GKTurnBasedParticipant *part in currentMatch.participants) {
if(part==currentMatch.currentParticipant)
{
if(points>scoreToBeat)
{
part.matchOutcome=GKTurnBasedMatchOutcomeWon;
}
else {
part.matchOutcome=GKTurnBasedMatchOutcomeLost;
}
}
else {
if(points>scoreToBeat)
{
part.matchOutcome=GKTurnBasedMatchOutcomeLost;
}
else {
part.matchOutcome=GKTurnBasedMatchOutcomeWon;
}
}
分数是设备上的本地分数,对吗?如果是这样,我会做以下工作:
if([part.playerID isEqualToString [GKLocalPlayer localPlayer].playerID]]) {
if(points>scoreToBeat) {
part.matchOutcome = GKTurnBasedMatchOutComeWon;
} else {
part.matchOutcome = GKTurnBasedMatchOutComeLost;
}
} else {
if(points>scoreToBeat) {
part.matchOutcome=GKTurnBasedMatchOutcomeLost;
} else {
part.matchOutcome=GKTurnBasedMatchOutcomeWon;
}
}
}
此外,记住使用NSLog查看要击败的分数是否实际转移。要继续使用currentTurnBasedMatch.matchData,可能会犯一个错误,您应该将委托方法中返回的currentTurnBasedMatch设置为GKTurnBasedMatch
编辑:我使用的代码截取如下
if([participant.playerID isEqualToString:[GKLocalPlayer localPlayer].playerID]){
NSLog(@"we are the last player in the game -end the game");
for (GKTurnBasedParticipant *part in match.participants) {
part.matchOutcome = GKTurnBasedMatchOutcomeTied;
}
[match endMatchInTurnWithMatchData:match.matchData completionHandler:^(NSError *error) {
if ([AppDelegate mainMenuController].multiGameMenu.turnBasedMenu !=nil) {
[[AppDelegate mainMenuController].multiGameMenu.turnBasedMenu reloadTableView];
}
} ];
}
分数是设备上的本地分数,对吗?如果是这样,我会做以下工作:
if([part.playerID isEqualToString [GKLocalPlayer localPlayer].playerID]]) {
if(points>scoreToBeat) {
part.matchOutcome = GKTurnBasedMatchOutComeWon;
} else {
part.matchOutcome = GKTurnBasedMatchOutComeLost;
}
} else {
if(points>scoreToBeat) {
part.matchOutcome=GKTurnBasedMatchOutcomeLost;
} else {
part.matchOutcome=GKTurnBasedMatchOutcomeWon;
}
}
}
此外,记住使用NSLog查看要击败的分数是否实际转移。要继续使用currentTurnBasedMatch.matchData,可能会犯一个错误,您应该将委托方法中返回的currentTurnBasedMatch设置为GKTurnBasedMatch
编辑:我使用的代码截取如下
if([participant.playerID isEqualToString:[GKLocalPlayer localPlayer].playerID]){
NSLog(@"we are the last player in the game -end the game");
for (GKTurnBasedParticipant *part in match.participants) {
part.matchOutcome = GKTurnBasedMatchOutcomeTied;
}
[match endMatchInTurnWithMatchData:match.matchData completionHandler:^(NSError *error) {
if ([AppDelegate mainMenuController].multiGameMenu.turnBasedMenu !=nil) {
[[AppDelegate mainMenuController].multiGameMenu.turnBasedMenu reloadTableView];
}
} ];
}
这是我最新项目的摘录,适合2人游戏。它在sendTurn过程中调用,此时游戏决定结束。在我看来,这比前面的答案(第一个代码块)更正确,因为在结束游戏之前,必须为所有参与者设置匹配结果 如果你有两个以上的玩家,那么你必须循环所有参与者,并相应地设置比赛结果
GKTurnBasedParticipant *curr = currentMatch.currentParticipant;
NSUInteger currentIndex = [currentMatch.participants indexOfObject:currentMatch.currentParticipant];
NSUInteger nextIndex = (currentIndex + 1) % [currentMatch.participants count];
GKTurnBasedParticipant *next = [currentMatch.participants objectAtIndex:nextIndex];
if (currScore < otherScore)
{
// Curr player lost
curr.matchOutcome = GKTurnBasedMatchOutcomeLost;
next.matchOutcome = GKTurnBasedMatchOutcomeWon;
}
else if (currScore == otherScore)
{
// Tied
curr.matchOutcome = GKTurnBasedMatchOutcomeTied;
next.matchOutcome = GKTurnBasedMatchOutcomeTied;
}
else
{
// Won
curr.matchOutcome = GKTurnBasedMatchOutcomeWon;
next.matchOutcome = GKTurnBasedMatchOutcomeLost;
}
GKTurnBasedParticipant*curr=currentMatch.currentParticipant;
NSUInteger currentIndex=[currentMatch.participants indexOfObject:currentMatch.currentParticipant];
NSUTEGER nextIndex=(currentIndex+1)%[currentMatch.participants count];
GKTurnBasedParticipant*next=[currentMatch.participants对象索引:nextIndex];
如果(当前分数<其他分数)
{
//咖喱选手输了
curr.matchoutput=GKTurnBasedMatchOutcomeLost;
next.matchOutcome=GKTurnBasedMatchOutcomeWon;
}
else if(currScore==其他分数)
{
//捆绑
curr.matchOutcome=gkturnbasedMatchoutcometed;
next.matchOutput=gkturnBasedMatchOutcometed;
}
其他的
{
//赢得
curr.matchOutcome=GKTurnBasedMatchOutcomeWon;
next.matchoutput=GKTurnBasedMatchOutcomeLost;
}
请注意,根据设计,您将在两台设备上看到“赢”
一个会说“我”下面有“赢”,另一个会说“(获奖者姓名)”下面有“赢”。这是我最新项目的摘录,适合2人游戏。它在sendTurn过程中调用,此时游戏决定结束。在我看来,这比前面的答案(第一个代码块)更正确,因为在结束游戏之前,必须为所有参与者设置匹配结果 如果你有两个以上的玩家,那么你必须循环所有参与者,并相应地设置比赛结果
GKTurnBasedParticipant *curr = currentMatch.currentParticipant;
NSUInteger currentIndex = [currentMatch.participants indexOfObject:currentMatch.currentParticipant];
NSUInteger nextIndex = (currentIndex + 1) % [currentMatch.participants count];
GKTurnBasedParticipant *next = [currentMatch.participants objectAtIndex:nextIndex];
if (currScore < otherScore)
{
// Curr player lost
curr.matchOutcome = GKTurnBasedMatchOutcomeLost;
next.matchOutcome = GKTurnBasedMatchOutcomeWon;
}
else if (currScore == otherScore)
{
// Tied
curr.matchOutcome = GKTurnBasedMatchOutcomeTied;
next.matchOutcome = GKTurnBasedMatchOutcomeTied;
}
else
{
// Won
curr.matchOutcome = GKTurnBasedMatchOutcomeWon;
next.matchOutcome = GKTurnBasedMatchOutcomeLost;
}
GKTurnBasedParticipant*curr=currentMatch.currentParticipant;
NSUInteger currentIndex=[currentMatch.participants indexOfObject:currentMatch.currentParticipant];
NSUTEGER nextIndex=(currentIndex+1)%[currentMatch.participants count];
GKTurnBasedParticipant*next=[currentMatch.participants对象索引:nextIndex];
如果(当前分数<其他分数)
{
//咖喱选手输了
curr.matchoutput=GKTurnBasedMatchOutcomeLost;
next.matchOutcome=GKTurnBasedMatchOutcomeWon;
}
else if(currScore==其他分数)
{
//捆绑
curr.matchOutcome=gkturnbasedMatchoutcometed;
next.matchOutput=gkturnBasedMatchOutcometed;
}
其他的
{
//赢得
curr.matchOutcome=GKTurnBasedMatchOutcomeWon;
next.matchoutput=GKTurnBasedMatchOutcomeLost;
}
请注意,根据设计,您将在两台设备上看到“赢”
一个在下面写着“我”和“赢了”,另一个在下面写着“赢了”的是“(获奖者姓名)。我把NSLog放在了每个地方。。。它的逻辑是正确的,比如说玩家应该输。在这部分之后,我不会对匹配数据做任何处理。。。只需使用[currentMatch endMatchInTurnWithMatchData:data completionHandler:^(NSError*error){if(error){NSLog(@“%@”,error);}}}];也许这就是问题所在。为了确保,在结束匹配之前调用给定的方法,对吗?因为在你结束一场比赛之前,每个球员都应该有一个比赛结果。你可以试着将比赛结果设置为GKTurnBasedMatchOutcomeLost,让每个玩家都能看到它是否有效(如果不是真的很奇怪的话)。。至于我的应用程序,我在任何情况下都会将结果设置为GKTurnBasedMatchOutcomeTied,因为我使用自定义的表视图来显示游戏,所以游戏结果只是使用matchData在本地计算/决定的。我将所有内容都更改为lost。。两人都被认为是迷路了。因此,显然存在一些错误。仍在尝试修补它。我已经把NSLog的无处不在。。。它的逻辑是正确的,比如说玩家应该输。在这部分之后,我不会对匹配数据做任何处理。。。只需使用[currentMatch endMatchInTurnWithMatchData:data completionHandler:^(NSError*error){