ios - 在 MKMapView 上同步 COCOS2D 层

标签 ios opengl-es cocos2d-iphone mkmapview mapkit

我正在尝试将 cocos2D 图层对象与 map 同步,我设法通过将 glView 调整为 MKMapView 的 visibleMapRect 来使其工作。我可以缩放、移动,我的对象跟随 map 。但是,MKMapView 和 cocos2D 层之间存在一个小而烦人的延迟。

我在每个显示循环中同步它。

方法:

1) 检索 MKMapView.visibleMapRect

2)设置glViewPort

3) 进行正交投影以将我的图层调整为 MapView。

我已经尝试过其他方法,比如用触摸移动 cocos2D 层,然后根据触摸移动我的 map 坐标,仍然滞后。

即使禁用 MapView 的加速和减速也不会消除滞后。

谢谢。

最佳答案

在黑暗中射击:我们知道 iOS 设备在缩放时使用优化来加速渲染。这对于 Safari 浏览器来说是正确的,当您放大时,实际上只放大了当前显示为浏览器窗口内容的图像。只有在您停止捏合 Action 后,设备才会更新 View 。

您会在旧设备上通过文本特别看到这一点。当设备以新的比例因子重新渲染内容时,文本突然再次变得清晰明快。我相信在 MKMapView 中进行了相同的优化。

您可能需要检查 visibleMapRect 值是否在缩放期间实际更新,以及它们是否准确反射(reflect)当前缩放级别。

我可以想象的另一个问题是 MKMapView + Cocos2D 的帧率很低。尤其是缩放可能会消耗大量 CPU 资源。您可能希望启用 cocos2d FPS 显示以查看帧速率。

在 cocos2d 中允许平滑 ScrollView (尤其是 UITableView 等复杂 View )所必需的另一个技巧是降低 cocos2d 的最大帧率(animationInterval)和/或在单独的线程上运行 gl View 的渲染。您的问题可能只是此问题的变体:UIScrollView pauses NSTimer until scrolling finishes

请注意,DisplayLink Controller 也会发生这种情况。 this question中的信息为我做了伎俩。

关于ios - 在 MKMapView 上同步 COCOS2D 层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11862007/

相关文章:

math - 如何沿圆移动点?

ios - UINavigationController 没有后退按钮

ios - 在 ios 中将图像转换为卡通

ios - "This UIView seems to be the delegate of an NSISVariable it doesn' t 什么都不知道。这是一个内部 UIKit 错误“错误

ios - 未调用 UIAccessibilityElement 回调

ios - 在不使用 .plist 文件的情况下使用 CCSpriteBatchNode

ios - 如何使用 Objective-C 将字节数组转换为短数组?

ios - SpriteKit - 沿一个方向缩放

ios - 表 TableView 中的字母部分

objective-c - Paint 应用程序,使用帧缓冲区在 OpenGL ES 中渲染纹理