编写苹果游戏中心应用程序(翻译 1.18 在多人游戏中处理玩家的状态变更)

 

1.18 在多人游戏中处理玩家的状态变更

问题

    你想要侦测多人模式下玩家何时断开连接。

解决方案

    实现和处理GKMatchDelegate类的match:player:didChangeState:托管消息。

讨论

    在多人游戏中,一个玩家知道其它玩家的状态是重要的。此处的状态,是连接或断开连接。

    假设你已经编写了一个赛车游戏,也使用了matchmaking。两个玩家连接后,开始了锦标赛的第一圈。突然,玩家#2断开了连接。此时,必须将这个消息通知给玩家#1,然后结束match,让玩家#1等待其它的邀请。

    为获得玩家状态变更的通知,实现和处理GKMatchDelegate类的match:player:didChangeState:托管消息。参数player包含状体变更的玩家的ID;而didChangeState:参数(GKPlayerConnectionState类型),将包含下面的值之一:

    GKPlayerStateUnknown

        玩家状态不可知。在一个赛车游戏中,你可能想要临时地保持该玩家的汽车位置不变。

    GKPlayerStateConnected

        玩家连接。你可能想要显示一条消息(如“玩家2已连接, 出发吧!”)给本地玩家。

    GKPlayerStateDisconnected

        玩家断开连接。使用该状态决定是否要停止游戏、回到主菜单等待另一场match、临时暂停游戏等等。

    你可以使用match对象的expectedPlayerCount实例方法获知还需要多个玩家才能开始游戏。比如,如果我们开始了一个需要两个玩家的游戏,然后,其中一个玩家断开了,则expectedPlayerCount将返回1,告诉我们这场游戏还需要一个玩家才能再次开始。在下面的代码中,假定我们在一个两人的match中,并且如果其中一人断开,我们就停止match。

    /* The player state changed
        (eg. connected or disconnected) */
    - (void) match:(GKMatch *)match
        player:(NSString *)playerID
        didChangeState:(GKPlayerConnectionState)state{

        switch (state){

            case GKPlayerStateDisconnected:{

                if ([match expectedPlayerCount] > 0){
                    [match disconnect];
                }
                break;

            }
        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值