在我看来,系统采用的屏幕截图与我的应用程序采用的屏幕截图不同 applicationWillResignActive
.
令我惊讶的是,系统拍摄的图像之间有大约 0.6 秒的延迟 (b) 以及游戏拍摄的图片 (d) .如果系统需要在 applicationWillResignActive
之前进行屏幕捕获,这有点有意义。 ,但对于具有快速移动物体的游戏,玩家很容易注意到这一点。
我该如何解决这个问题?
以下是播放器执行的步骤以及它如何导致这种差异:
(a) 玩家在玩游戏时会按一下主页按钮。 (b) 系统屏幕截图已完成。 (c) 玩家点击游戏图标。 (d) 游戏启动时截屏 applicationWillResignActive
. (e) 游戏暂停显示快速移动物体的差异。
最佳答案
我相信这是因为你的游戏渲染不在主线程上(当然它不应该在主线程上),所以当 applicationDidEnterBackground/applicationWillResignActive
返回时,系统立即从视频卡的缓冲区中截取屏幕截图。
此时,您的游戏循环线程仍在运行,因此它可能会在暂停之前更新一些帧。
我不知道你是如何实现你的游戏循环的,但你可以试试这个:
在 applicationDidEnterBackground/applicationWillResignActive
,放置一个全局信号量( dispatch_semaphore_t
)并阻塞主线程,在您的游戏循环中,观察信号量,如果存在,则暂停您的游戏循环,然后向信号量发出信号。
这将确保在您的游戏暂停后截取屏幕截图。
还要注意在 applicationWillResignActive
之后,系统会为任务切换器做快照,之后 applicationDidEnterBackground
,系统会在您下次应用进入前台时拍摄快照。
希望这会帮助你。
关于ios7 - iOS 多任务切换器系统镜像与应用程序镜像差异解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24635464/