問題タブ [cadisplaylink]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - CADisplayLink で再描画を強制する
私は現在CADisplayLink
、うまく機能するOpenGLアニメーションを表示するために使用しています。ただし、パラメーターが変更され、すぐにビューを再描画する必要があり、次のフレームが によって要求されるまで待てないことがありCADisplayLink
ます。そうしないと、フレームが 1 つ間違ってしまい、私の場合は非常に見栄えが悪くなります。
EAGLView
では、どうすればものに干渉せずに を強制的に再描画できCADisplayLink
ますか?
syntax - NSTimer を CADisplayLink に置き換えるには?
次のように NSTimer を使用して doPoof メソッドを呼び出します。
NSTimer の代わりに CADisplayLink を使用して上記を置き換える方法は?
ios - CADisplayLink ターゲット セレクターが無効化された後にトリガーされる
draw
Director オブジェクトのメソッドをトリガーする CADisplayLink があります。CADisplayLink を無効にしてから、Director オブジェクトが使用するシングルトン キャッシュ オブジェクトの割り当てを解除したいと考えています。シングルトン Cache オブジェクトは、draw
メソッドによって保持されません。
Director で呼び出されるメソッドstopAnimation
(このメソッドはメソッドとは関係draw
ありません) で、次のことを行います。
次に、シングルトン Cache オブジェクトの解放を開始しますが、CADisplayLink が起動し、draw
メソッドが最後にもう一度呼び出されます。メソッドはdraw
、割り当てが解除されたシングルトン オブジェクトにアクセスしようとし、すべてがクラッシュします。
これはたまにしか発生しません。displayLink が実際に無効になり、draw メソッドの実行が既に終了した後に Cache オブジェクトが解放されるため、アプリがクラッシュしない場合もあります。
Cache オブジェクトを安全に無効にするために、displayLink を無効にした後、draw メソッドの実行が終了し、再度呼び出されないことを確認するにはどうすればよいですか? draw
可能であれば、メソッドを変更したくありません。
displayLink invalidate
を使用してメインスレッドで実行するなど、いくつかの組み合わせを試しました
[self performSelectorOnMainThread:@selector(stopAnimation) withObject:self waitUntilDone:YES]
または使用して currentRunLoop で実行しようとしています
[[NSRunLoop currentRunLoop] performSelector:@selector(stopAnimation) target:self argument:nil order:10 modes:[NSArray arrayWithObject:NSDefaultRunLoopMode]];
ただし、結果は常に同じで、共有キャッシュの解放が早すぎる場合があります。
performSelector:withObject:afterDelay:
また、任意の遅延でメソッドを使用したくありません。displayLink が無効になっていること、draw メソッドが終了していること、および再度実行されないようにしたいと考えています。
iphone - xcode に複数の CADisplayLink がある
アプリで 2 つの CADisplayLink を使用できるかどうかを知りたいですか?
私の英語ですみません、私はフランス語です
iphone - Xcode から起動した場合、iPhone アプリの動作が異なります
ゲームプレイを制御するために基本的に2つのタイマーを持つゲームに取り組んでいます。1 つのタイマーは、フレームごとに (OpenGL を使用して) ディスプレイを再描画するための呼び出しを行う CADisplayLink であるため、60 Hz をわずかに下回ります。もう 1 つのタイマーは、ゲーム ロジックを更新する NSTimer で、30 Hz から 100 Hz の間で実行してみました。
iOS シミュレーターでプログラムを実行すると、ラグが発生し、フレームがスキップされているように見えます。Xcode を使用して携帯電話でプログラムを実行すると、遅延やスキップなしで完全に動作します。次に、携帯電話のホーム画面のアイコンからプログラムを実行すると、ラグが発生します。
プログラムを電話にロードして Xcode から実行し、電話自体から起動することにはどのような違いがありますか? Xcode デバッガーと通信していることは理解していますが、Xcode に接続するとどのように機能するのでしょうか?
最後に、同じ CADisplayLink からゲーム ロジックとグラフィックスの両方を実行すると、遅延が大幅に減少するようです。表示リンクと NSTimer の両方が本当にこのような問題を引き起こしているのでしょうか?
iphone - CADisplayLink 前方宣言エラー
さて、私はこのコンパイラ エラーに何時間も完全に困惑してきました。iPhone ゲーム開発の本のチュートリアルに従っているのですが、ランダムなコンパイラ エラーのために第 2 章で行き詰まってしまいました。
注意: 私は現在、iOS 5 ベータ版の XCode 4.1 で実行およびテストしています。
宣言は次のとおりです。
ヘッダー ファイル内:
.m ファイル内
これらは両方ともエラーをスローします: クラスメッセージのレシーバー 'CADisplayLink' は前方宣言です
しかし、オンラインのすべての投稿には、まったく同じ行があります。エラーの種類は「自動参照カウントの問題」です。
どんな助けでも大歓迎です!
iphone - iPhone OpenGL ES glFlush() が一貫して遅い
一見無作為に見えますが (ただし、特定のプログラムの実行中は通常一貫しています)、私のpresentRenderBuffer
呼び出しは非常に遅いです。makeの呼び出しまで追跡したglFlush()
のでpresentRenderBuffer
、今はglFlush()
presentRenderBuffer の直前に呼び出します。にタイマーを設定するglFlush()
と、一見ランダムに 2 つのうちのいずれかが実行されます。
glFlush()
また
1) 一貫して 0.0003 秒かかります
また
2) 約 0.019 秒と 0.030 秒を交互に繰り返す
最も奇妙なことは、これが描画コードから独立していることです。すべての描画コードをコメントアウトしてglClear()
、 call だけを実行しても、2 つの結果のうちの 1 つがランダムに取得されます。
描画メソッドはCADisplayLink
、次の設定でによって呼び出されます。
結果の 1 つが発生する原因を特定することは不可能であることがわかっています。誰でもアイデアを提供できますか?
iphone - CADisplayLink は、停止後にもう一度起動します
私のアプリが奇妙に動作し始めた昨日までは、すべて問題ありませんでした。シミュレーターでは問題なく動作しますが、iPhone4 では停止後も 1 サイクル余分に実行されます。新しい CADisplayLink タイマーを作成するか、既存のタイマーを再開するイニシャライザは次のとおりです。
}
タイマーを頻繁に停止して再開する必要があるため、一時停止プロパティでタイマーを停止しています。
次に、それを再開するイニシャライザを呼び出しています (self.theTimer.pause = NO)。前述のように、selector メソッドへの追加の呼び出しを 1 つ実行します。非常に奇妙なことに、私はこのアプリを CADisplayLink の問題なしで 1 か月以上使用していました。最近iPhoneのアップデートをしていません。さらに、システム サウンドは同時に再生を停止しましたが、AVAudioPlayer オブジェクトは引き続き動作します。私が言ったように、タイマーとサウンドの両方がシミュレーターで完全に機能しますが、iPhoneで問題が発生する原因を突き止めたいです。すべてのものは純粋な UIKit で行われます。どこから始めればよいですか?
ios - Cocos2DへのCADisplayLinkの追加
アプリにCocos2Dがあり、ゲームのゲームエンジンとして使用しています。この時点で、画面が更新される速度でゲームループを起動する必要があります。したがって、これにより、CADisplayLinkを使用する必要があると思います。では、Cocos2Dで構成されるゲームループが画面が更新される速度で呼び出されるように、CADisplayLinkをどのように実装すればよいでしょうか。
ありがとう!