我正在尝试将 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/