0

CADisplayLink(20 FPSで実行)を使用して、OpenglESシーンを再描画します。これを行うと、touchsBeginとtouchsEndedの間にタッチイベントで200ミリ秒以上の大きな遅れがあることがわかりました。

CADisplayLinkをオフにすると、ラグは50ミリ秒に短縮されます。この問題を解決する方法を知っている人はいますか?

4

1 に答える 1

2

特に指定しないため、CADisplayLinkはメインスレッドで実行されていると思います。その場合は、レンダリングアクションでメインスレッドをオーバーロードして、タッチイベントが処理されないようにすることができます(すべてのタッチイベントはメインスレッドで処理されます)。

同様の問題に対する私の解決策は、OpenGL ESレンダリングアクションにシリアルGCDキューを使用し、ディスパッチセマフォと組み合わせて、CADisplayLinkの起動に応答して一度に1つのフレームのみがレンダリングされるようにすることでした。私のこの回答はプロセスを詳細に説明しており、これを使用するアプリケーションのソースコードにリンクしています。副次的な利点として、これにより、新しいマルチコアデバイスでのレンダリング速度が最大40%向上します。

于 2012-04-18T18:31:10.853 に答える