在MKMapView上同步COCOS2D层

时间:2012-08-08 09:55:28

标签: ios opengl-es cocos2d-iphone mkmapview mapkit

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

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

方法:

1)检索MKMapView.visibleMapRect

2)设置glViewPort

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

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

在黑暗中拍摄:我们知道iOS设备在扩展时使用优化来加速渲染。这适用于Safari浏览器,当您放大时,实际上只放大当前显示为浏览器窗口内容的图像。只有在停止捏动后,设备才会更新视图。

您将在旧设备上专门看到此文字。当设备使用新比例因子重新呈现内容时,文本突然变得清晰锐利。我相信在MKMapView中完成相同的优化。

您可能想要检查缩放期间是否实际更新了visibleMapRect值,以及它们是否准确反映了当前的缩放级别。

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

允许在cocos2d中平滑滚动视图(尤其是像UITableView这样的复杂视图)的另一个技巧是减少cocos2d的最大帧速率(animationInterval)和/或在单独的线程上运行gl视图的渲染。您的问题可能仅仅是此问题的变体:UIScrollView pauses NSTimer until scrolling finishes

请注意,DisplayLink Director也会出现这种情况。 this question中的信息对我有用。