标签: gamekit

iOS 在线游戏没有服务器吗?

我制作了一款可以通过蓝牙和 bonjour 运行的 iOS 游戏。两种方式都很好用,但如果玩家可以通过任何互联网连接(无论是边缘、3G 还是不同的 wi-fi 地址)互相玩游戏,我真的很喜欢。

问题是:我没有资源或知识来设置专用服务器或类似的东西。看来 GameKit 中肯定有一些东西可以让我做到这一点,但尽管上周花了几十个小时弄清楚如何使用它,但我什么也没发现。

那么,有人有解决方案的想法吗?我的游戏只是一对一的,如果这能让事情变得更容易的话。

iphone p2p gamekit ios

5
推荐指数
1
解决办法
1597
查看次数

如果网络不可用,Game Center/GameKit报告得分

我正在创建类似于支持Game Center的游戏.当玩家正确认证游戏中心但在我想报告我的分数时网络(wifi或手机)不可用时,我在向排行榜报告得分时遇到问题.

我的应用程序适用于iOS 5.0及更高版本,根据文档 - 排行榜 - 它应该像他们说的那样工作 - 我只使用该功能

- (void)reportScoreWithCompletionHandler:(void (^)(NSError *error))completionHandler and 
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因由于网络错误而无法报告分数,则Game Kit会在网络可用时自动重新发送数据.

但是当我关闭wifi,玩这个游戏并在这个离线模式下报告分数时,我的分数在我重新上线时没有报告!:(与我的成就相同的问题.是否有任何技巧或已知问题?或者此功能仅适用于实时应用而不是测试?

非常感谢你.

leaderboard achievements gamekit ios game-center

5
推荐指数
1
解决办法
944
查看次数

为什么发布通知会导致崩溃?

我使用以下代码来发布通知,但它因 EXC_BAD_ACCESS 而崩溃:

[[NSNotificationCenter defaultCenter]postNotificationName:AUTHENTICATED_NOTIFICATION object:nil];
Run Code Online (Sandbox Code Playgroud)

在我的 Constants.h 文件中:

#import <Foundation/Foundation.h>

extern NSString *const PLAYER_ID;
extern NSString *const RANDOM_NUMBER;

extern NSString *const AUTHENTICATED_NOTIFICATION;
extern NSString *const UNAUTHENTICATED_NOTIFICATION;

@interface RIYConstants : NSObject
{

}

@end
Run Code Online (Sandbox Code Playgroud)

在我的 Constants.m 文件中

#import "RIYConstants.h"

NSString *const PLAYER_ID = @"playerId";
NSString *const RANDOM_NUMBER = @"randomNumber";

NSString *const AUTHENTICATED_NOTIFICATION = @"AUTHENTICATED_NOTIFICATION";
NSString *const UNAUTHENTICATED_NOTIFICATION = @"UNAUTHENTICATED_NOTIFICATION";

@implementation RIYConstants

@end
Run Code Online (Sandbox Code Playgroud)

崩溃的方法是游戏中心验证时调用的处理程序:

-(void)authenticatedPlayer:(GKLocalPlayer*)localPlayer
{
    [[NSNotificationCenter defaultCenter]postNotificationName:AUTHENTICATED_NOTIFICATION object:nil];
     ......
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它会崩溃。每次发布通知时它都不会崩溃(似乎是随机的)。

编辑:只有一个对象注册接收通知。下面是 init 方法和调用的选择器。我认为没有任何事情会导致崩溃。_label 和 _joinGame 都是 SKLabelNodes

-(id)init
{ …
Run Code Online (Sandbox Code Playgroud)

objective-c gamekit nsnotificationcenter ios game-center

5
推荐指数
1
解决办法
3521
查看次数

在 SpriteKit 中显示游戏中心排行榜

我正在开发一款游戏,我正在寻找帮助或代码,以便在用户单击按钮时在我的应用程序中显示 GameCenter 排行榜。我不知道从哪里开始,因为所有其他答案似乎都是针对 Obj-C 的,谢谢!

编辑:下面的答案工作得很好,但是对于那些想知道如何在 SpriteKit 中执行此操作的人,只需将以下方法GameViewController添加到并添加一个通知中心观察者

NSNotificationCenter.defaultCenter().addObserver(self, selector: "showLeaderboard", name: "showLeaderboard", object: nil)
Run Code Online (Sandbox Code Playgroud)

在您的SKScene班级中,只需调用该观察者即可。

NSNotificationCenter.defaultCenter().postNotificationName("showLeaderboard", object: nil)
Run Code Online (Sandbox Code Playgroud)

只是为了帮助那些疑惑的人!

gamekit game-center sprite-kit game-center-leaderboard swift

5
推荐指数
1
解决办法
614
查看次数

GKMatchmaker findMatchForRequest邀请从未收到过

我正在尝试邀请附近的玩家参加比赛,但邀请函要么从未发送过,要么从未收到过.

GKMatchMaker startBrowsingForNearbyPlayersWithHandler工作并返回相同wifi上的附近玩家,但之后我使用findMatchForRequest并返回没有任何玩家的匹配,我尝试邀请的玩家永远不会收到邀请通知.这是我的代码.

我首先验证本地播放器:

GKLocalPlayer.localPlayer.authenticateHandler= ^(UIViewController *controller, NSError *error)
{
    if (error)
    {
        NSLog(@"%s:: Error authenticating: %@", __PRETTY_FUNCTION__, error.localizedDescription);
        return;
    }
    if(controller)
    {
        // User has not yet authenticated
        [pViewController presentViewController:controller animated:YES completion:^(void)
         {
             [self lookForNearbyPlayers];
         }];
        return;
    }
    [self lookForNearbyPlayers];
};

-(void)lookForNearbyPlayers
{
    if(!GKLocalPlayer.localPlayer.authenticated)
    {
        NSLog(@"%s:: User not authenticated", __PRETTY_FUNCTION__);
        return;
    }
Run Code Online (Sandbox Code Playgroud)

我将我的视图控制器注册为GKLocalPlayerListener的委托:

    [GKLocalPlayer.localPlayer registerListener:self]; // self is a view controller.

    // This works. My test local player which is a second device and appleID I setup shows up …
Run Code Online (Sandbox Code Playgroud)

objective-c gamekit ios game-center ios9

5
推荐指数
1
解决办法
388
查看次数

使用 Game Center 实现 SpriteKit 游戏的多人游戏

我有一个完整的 Sprite Kit 游戏,它本身很可靠,但是我真的很想将实时多人游戏功能融入其中。唯一的问题是我找不到任何教程来说明如何做到这一点(raywenderlich.com 有一个,但它是使用 Objective-C 的,而我的游戏是用 Swift 编写的)。

我已经通读了苹果的文档,但是,它实际上只是涵盖了正在发生的事情的逻辑,并列出了所使用的部分,而不是实际展示如何实现代码。

我想知道是否有人可以帮助我如何实际实施代码。从我通过搜索可以看出,这是一个非常受欢迎的主题,但没有任何关于使用 swift 的教程。

gamekit game-center sprite-kit swift

5
推荐指数
0
解决办法
500
查看次数

SwiftUI 游戏中心身份验证不提示用户登录

我有以下代码可以在我的 SwiftUI 应用程序中对 Game Center 中的本地玩家进行身份验证。如果玩家尚未登录,我希望 Game Center 提示用户登录,但这不会发生。

class AppSettings: UINavigationController {
    func authenticateUser() {
        let localPlayer = GKLocalPlayer.local
        localPlayer.authenticateHandler = { vc, error in
            guard error == nil else {
                print(error?.localizedDescription ?? "")
                return
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?我还阅读了关于在我班级的某处使用 UIViewControllerRepresentable 将 UIKit 的 ViewController 集成到 SwiftUI 中的内容,但我不明白如何使用它。有人可以帮我吗?

gamekit game-center swift swiftui uiviewcontrollerrepresentable

5
推荐指数
1
解决办法
355
查看次数

如何在网络故障后保存并重试报告GKAchievement?

Apple声明,如果您想报告GKAchievement但是您遇到网络错误,处理此问题的最佳方法是保存GKAchievement(可能将其添加到阵列中),然后定期尝试报告成就.

保存成就的最佳地点是什么?NSUserDefaults会满足,还是财产清单会更好?

我应该何时以及何时尝试举报?在应用程序启动时,或每10分钟一次?

iphone objective-c achievements gamekit game-center

4
推荐指数
1
解决办法
849
查看次数

游戏中心无法识别游戏

可能重复:
游戏中心无法识别游戏

我知道这已被问过几次,但其他线程中的解决方案,例如从模拟器中删除应用程序并重新安装对我来说不起作用.

我的info.plist中的软件包ID与iTunes Connect中的ID匹配,我已在ITC中正确设置了一个测试应用程序.

我获得此警报的唯一方法是将gamekit设置为info.plist的UIRequiredDeviceCapabilities键中的要求.根据Apple的文档,只有在GameKit是应用程序运行的要求且不需要与Game Center集成时才应设置此项.

有什么想法会发生这种情况吗?

center gamekit ios

4
推荐指数
1
解决办法
6311
查看次数

我已登录,但无法保存GameData,因为“未登录iCloud”

我得到错误:

错误域= GKErrorDomain代码= 27“由于您尚未登录iCloud,所以无法完成请求的操作” UserInfo = 0x1889f160 {NSLocalizedDescription =由于您尚未登录iCloud,所以无法完成请求的操作}

当我尝试使用以下明显的代码保存游戏数据时:

[[GKLocalPlayer localPlayer] saveGameData:serializedData withName:@"SaveName" completionHandler:^(GKSavedGame *savedGame, NSError *error) {
if (savedGame != nil) {
    NSLog(@"Player data saved to GameCenter: %@", savedGame);
} else {
    NSLog(@"Player data NOT saved to GameCenter, error: %@",  error.description);
}
}];
Run Code Online (Sandbox Code Playgroud)

更为奇怪的是,它已经在两个星期前生效了,所以我将其注释掉并开始编写其他内容:排行榜,应用内购买–以及所有这些工作。

我正在登录到Game Center和iCloud的iPhone(iOS 8.1.3)上对其进行测试,我已打开iCloud Drive,但无法保存。我什至设置了一个新的测试帐户,但结果相同。

是否可以在同一测试帐户上测试所有这些功能,否则会导致此问题,还是该联系Apple了?

gamekit ios icloud

4
推荐指数
1
解决办法
1067
查看次数