Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS 5/6在线实时多人游戏_Iphone_Cocoa Touch_Cocoa - Fatal编程技术网

Iphone iOS 5/6在线实时多人游戏

Iphone iOS 5/6在线实时多人游戏,iphone,cocoa-touch,cocoa,Iphone,Cocoa Touch,Cocoa,我知道已经有一些关于这个话题的帖子了,但是我找不到我需要的答案,我也不知道从哪里开始 我想为iPhone创建一个在线多人游戏,玩家可以通过互联网一起玩。例如,一个两人赛车游戏,当两个玩家匹配并连接后,他们都可以实时控制彼此的赛车。比如像马里奥·卡特 我知道游戏套件可以这样做,但只能通过蓝牙或相同的wifi网络。我希望这是通过互联网(仅限wifi)进行的,玩家可以在世界各地相互比赛 我知道已经有一些框架可以做到这一点。但它们的成本很高,而且取决于连接的数量。有没有一种便宜的或者我敢说是免费的方式来

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

我想为iPhone创建一个在线多人游戏,玩家可以通过互联网一起玩。例如,一个两人赛车游戏,当两个玩家匹配并连接后,他们都可以实时控制彼此的赛车。比如像马里奥·卡特

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

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

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

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

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


提前感谢。

您正在寻找的是GameKit“hosted match”包装,它可能确实存在。需要注意的是,苹果不会托管这些类型的匹配,而你自己的服务器会托管。所以,你需要一个网络主机,而这些主机通常不是免费的。亚马逊的AWS对于一个微实例是免费的,但根据规模的不同,你可能会有足够的同步播放

我更感兴趣的是了解潜在的GameKit包装,因为您已经提到了它。你能评论一下你的发现吗?你提到它们很贵,而且连接也有限制


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

你应该查看实时点对点网络服务,因为它听起来似乎与你的项目完美匹配


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

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

下面是一些示例代码来帮助您进行解释。这只是简单的要点,你当然需要实现你的游戏性,以及一些错误处理

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


如果GameKit还没有提供,我假设您需要某种配对服务器来连接。我以为游戏中心有助于在线配对,但我可能弄错了是的,游戏中心有内置配对功能…对不起,你说的“游戏中心有什么功能”是什么意思?还有,在配对后在iPhone之间发送数据呢?另外,我认为游戏套件配对API只会在同一wifi网络或蓝牙上查找配对,而不会在全球范围内查找。我说的对吗?实际上,gamekit match making API可以使用互联网查找匹配项,这意味着它可以匹配世界各地的用户。看看Doodle Jump实现multiplayer.PubNub的方式,每月至少15美元。你能提供一些关于如何使用PubNub的链接吗?我认为你需要使用特殊的SDK来发送和接收多人游戏的PubNub消息?如果你想玩,有一个免费的开发者层。如果15美元超出预算,你可以自己实施,但这会让你在前进的过程中花费更多的啤酒和三明治。点击上面的链接,然后按“开发者”,这里有iOS、PHP等的例子。是否有“最佳实践”用于实时多人游戏发送数据?(多久一次,如何达到平滑度等?)。谢谢老实说,我在这方面只有一点经验,所以我说的任何话都应该小心谨慎。但基本上,您应该以适合您的游戏的频率发送数据(这会有所不同),并且请记住,您发送数据包的速率将与您接收数据包的速率相反映。如果有持续运行的动画(为精灵设置动画等等),则单独使用didReceiveData方法设置动画,并根据需要使用该方法更新精灵位置,以确保动画平滑。
- (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.
    }
}