3

我知道已经有一些关于这个主题的帖子,但我找不到我需要的答案,我不知道从哪里开始。

我想为 iPhone 创建一个在线多人游戏,玩家可以通过 Internet 一起对战。例如一个 2 人赛车游戏,一旦 2 人匹配和连接,他们就可以实时控制他们的汽车。例如像马里奥车。

我知道游戏套件会这样做,但只能通过蓝牙或同一个 wifi 网络。我希望这是通过互联网(仅限 wifi),玩家可以在世界各地互相对抗。

我知道已经有一些框架可以做到这一点。但它们的成本很高,并且取决于连接的数量。有没有便宜的或者我敢说,免费的方式来做到这一点?比如让游戏套件进行匹配,然后以其他方式完成连接和发送数据?就像让 iPhone 托管游戏一样?而不是拥有专用服务器。我没有预算,也没有创建专用服务器的知识和经验。

匹配很简单。共有 30 个关卡,任何 2 名想要玩同一关卡的玩家都可以匹配。

欢迎任何链接或书籍推荐。我的网络知识非常有限,不知道从哪里开始。

我可以阅读和学习这些技术,即使它们是技术性的,但我需要正确的资源来让我开始

提前致谢。

4

3 回答 3

5

实际上,您可以使用 Game Kit API 做您正在寻找的事情。基本上,您使用 GKMatchMakerViewController 创建匹配。要进行匹配,您使用 GKMatchMakerViewController 开始寻找其他玩家,一旦它找到其他玩家,它就会通知 GKMatchMakerViewControllerDelegate 已经找到匹配并将传递 GKMatch 对象。然后你需要一个实现 GKMatchDelegate 协议的对象来处理实际数据。您将您的委托对象设置为您传递的 GKMatch 的委托,然后使用 GKMatchDelegate 协议中的方法,例如 – match:didReceiveData:fromPlayer: 和 GKMatch 中的方法来发送数据。

下面是一些示例代码来帮助解释。这只是最基本的,你当然需要实现你的游戏内容,以及一些错误处理。

此外,您可以在这四个链接中找到您需要的文档

GKMatchMakerViewController GKMatchMakerViewControllerDelegate GKMatch GKMatchDelegate

- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID{
    if(matchStarted){
        Packet *msg = (Packet *)[data bytes];
       //do whatever you want with the data received from other people
    }
}

-(void)sendPosition{
    //call this to update the other players devices (should be self explanatory)
    NSError *error;
    Packet msg;
    //Here the msg object is actually a typedefed struct name Packet. I use this to send and receive data
    NSData *packet = [NSData dataWithBytes:&msg length:sizeof(msg)];
    [myMatch sendDataToAllPlayers: packet withDataMode: GKMatchSendDataUnreliable error:&error];
    if (error != nil)
    {
        // handle the error
    }
}

#pragma mark MatchSetup

- (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match{
    [self dismissModalViewControllerAnimated:YES];
    self.myMatch = match; // Use a retaining property to retain the match.
    self.myMatch.delegate = self;
    if (!matchStarted)
    {
        // Insert application-specific code to begin the match.
    }
}
于 2012-06-15T04:17:29.317 回答
1

您应该查看实时点对点网络服务PubNub,因为它听起来非常适合您的项目。

我发现 PubNub 很容易实现,即使我的编程知识不多。集成不同平台也很容易,因为大多数常用语言都有 SDK。我有一个基于 PHP 的网页,作为我基于 iOS 的应用程序的记分牌。

于 2012-06-14T21:47:01.637 回答
0

您正在寻找的是一个可能确实存在的 GameKit“托管匹配”包装器。需要注意的是,Apple 不托管这些类型的比赛,您自己的服务器可以。因此,您需要一个虚拟主机,而这些通常不是免费的。亚马逊的 AWS 对微型实例是免费的,但根据规模,您可能会获得足够的同步播放。

既然你已经提出了它,我对了解潜在的 GameKit 包装器更感兴趣。你能评论一下你的发现吗,你提到它们很贵并且对连接有限制。

PS - Apple 的限制是最多 16 名玩家

于 2012-06-14T21:02:14.827 回答