2

私は cocos2D レイヤー オブジェクトをマップと同期しようとしています。glView を MKMapView の visibleMapRect に調整することで、なんとか機能させることができました。ズームしたり移動したりできます。オブジェクトはマップに従っています。ただし、MKMapView と cocos2D レイヤーの間には、小さくて厄介なラグがあります。

表示ループごとに同期しています。

方法:

1) MKMapView.visibleMapRect を取得します。

2) glViewPort を設定する

3) 正投影を実行して、レイヤーを MapView に調整します。

cocos2Dレイヤーをタッチで移動し、タッチに応じてマップの座標を移動するなど、他の方法をすでに試しましたが、まだ遅れています。

MapView の加速と減速を無効にしても、ラグは解消されません。

ありがとう。

4

1 に答える 1

0

暗い場所で撮影: iOS デバイスが最適化を使用して、スケーリング中にレンダリングを高速化することがわかっています。これは Safari ブラウザーに当てはまります。拡大すると、実際にはブラウザー ウィンドウのコンテンツとして現在表示されている画像のみが拡大されます。ピンチ モーションを停止した後でのみ、デバイスはビューを更新します。

これは、特に古いデバイスのテキストで表示されます。デバイスが新しい倍率でコンテンツを再レンダリングすると、テキストが突然シャープで鮮明になります。MKMapView でも同じ最適化が行われていると思います。

ズーム中に visibleMapRect の値が実際に更新されているかどうか、および現在のズーム レベルが正確に反映されているかどうかを確認することをお勧めします。

私が想像できるもう 1 つの問題は、MKMapView + Cocos2D のフレームレートが単純に低いことです。特にズームは、多くの CPU パワーを消費する可能性があります。フレームレートを確認するには、cocos2d FPS ディスプレイを有効にすることをお勧めします。

cocos2d でビュー (特に UITableView のような複雑なビュー) をスムーズにスクロールできるようにするために必要なもう 1 つのトリックは、cocos2d の最大フレームレート (animationInterval) を下げるか、gl ビューのレンダリングを別のスレッドで実行することです。あなたの問題は単にこの問題のバリエーションである可能性があります: UIScrollView は、スクロールが完了するまで NSTimer を一時停止します

これは、DisplayLink ディレクタでも発生することに注意してください。この質問の情報は私にとってはうまくいきました。

于 2012-08-08T12:20:17.687 に答える