gpt4 book ai didi

iphone - Game Center 窗口在 OpenGL 游戏上滚动不顺畅

转载 作者:行者123 更新时间:2023-12-03 19:58:34 25 4
gpt4 key购买 nike

我有一款已发布的 OpenGL 游戏,我正在为其添加游戏中心支持以实现 1.1 版本。该游戏不使用 UIViewController,在 AppDelegate 中编码如下:

-(void)applicationDidFinishLaunching:(UIApplication *)application 
{
window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
[window setUserInteractionEnabled:YES];
[window setMultipleTouchEnabled:YES];

glView = [[EAGLView alloc] initWithFrame:[UIScreen mainScreen].bounds];

[window addSubview:glView];
[window makeKeyAndVisible];

[glView performSelectorOnMainThread:@selector(mainGameLoop) withObject:nil waitUntilDone:NO];
}

一切都很好,但是当游戏中心调出一个窗口(例如 GKAchievementViewController)时,该窗口在屏幕上的动画效果很好,但是当我触摸滚动它时,它没有任何动量或反弹,就像正常的 window 。当我将窗口滚动到顶部和底部时,它不会反弹回来。

该窗口功能齐全,可以记录触摸,只是表现得很丑。

我认为这是因为一些信息没有正确发送到管道,因为我没有 UIViewController?我尝试创建一个位于 UIWindow 和 OpenGL UIView 之间的 UIViewController,但我得到了相同的行为。

这就是我创建 GKAchievementViewController 对话框的方式:

-(void)displayAchievements
{
achievmentsViewController = [[UIViewController alloc] init];
[glView addSubview:achievmentsViewController.view];

GKAchievementViewController *achievements = [[GKAchievementViewController alloc] init];
if (achievements != nil)
{
achievements.achievementDelegate = self;
[achievmentsViewController presentModalViewController:achievements animated:YES];
}

[achievements release];
}

我在游戏中没有使用任何 UIKit,所有按钮等都是直接使用 OpenGL 完成的。我也没有使用 cocos2d 或任何其他框架。

在我的主循环中,我正在这样做:

while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.002, TRUE) == kCFRunLoopRunHandledSource);

除此之外,我不会定期调用操作系统。

有人知道这是怎么回事吗?除了这个问题之外,我的游戏已准备好提交,这让我发疯。

最佳答案

好的,我想我找到了这个问题的答案,所以我要回答我自己的问题,希望能够避免其他人的挫败感。

问题是CFRunLoopRunInMode。它与 UIKit 配合得不太好。我改用 CADisplayLink,一切都很好。

displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(mainLoopBody)];
[displayLink setFrameInterval:1];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

我读到 CADisplayLink 导致了一些游戏问题,并且关于使用它、CFRunLoopRunInMode 和 NSTimer 有很多争论。我将使用它一段时间,看看它是否会导致任何问题,但窗口会再次向右滚动。

我对 CADisplayLink 的一个担忧是帧速率是否开始下降。在我的旧 CFRunLoopRunInMode 系统下,如果帧花费的时间较长,则增量时间会反射(reflect)这一点。对于 CADisplayLink,我不确定情况是否仍然如此。

哦,编程的乐趣。

关于iphone - Game Center 窗口在 OpenGL 游戏上滚动不顺畅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7224741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com