2017-01-19 14 views
0

私の最初の投稿です。間違いがあれば、私に負担してください。CADisplayLinkは連続フレーム間に適切な時間間隔を提供していません

私はiPhone開発には初めてです。私はCADisplayLinkを使って自分のゲームの「更新」ループを実行していました。 XCode 8.2では、次のコードを使用して2つの連続するフレーム間の差分時間を計算しています。私gameLoop()関数

{ 
    if (mDisplayLink==NULL) return; 
    mApp->CoreLoopUpdate((double)mDisplayLink.timestamp); 
} 

インサイド

私AppDelegate.mmファイル内

{ 
    mDisplayLink = [CADisplayLink displayLinkWithTarget: self selector:@selector(gameLoop)]; 
    mDisplayLink.preferredFramesPerSecond = 60 ; 
    [mDisplayLink addToRunLoop :[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; 
} 

私CoreLoopUpdate(ダブルtimeStampに)関数の内部

{ 

    mDeltaTime = timestamp - mLastTimeStamp ; 

    if(mGame->IsInitialized()) 
    { 
      Update(mDeltaTime); 
      PreRender(mDeltaTime); 
      Render(mDeltaTime); 
     } 

     mLastTimeStamp = timestamp ; 

    std::cout<<"\nFPS : " << 1.0/mDeltaTime ; 

} 

それは正しいFPSを印刷しました。私の古いシステム(MacBook Pro、OS - Yosemite、XCode 7.1)では(29 - 30)。私のシステム(OS - Sierra、XCode - 8.2)をアップグレードしたとき、その値は適切ではありません。それは私のゲームのプレーを台無しにする(2fpsから30fpsまで)劇的に変化します。

また、 http://www.gamasutra.com/blogs/KwasiMensah/20110211/88949/Game_Loops_on_IOS.php#note9に従って、デルタタイム計算のバリエーションを実装しました。 しかし、それは問題を解決しませんでした。

提案が役に立ちます。

答えて

0

あなたの投稿からは、あなたのアプリをシミュレータで試しているようです。実際のデバイスでも同じことをしていますか? CADisplayLinkは、シミュレータ上よりもデバイス上で優れた動作をします。 もう一つ:あなたが表示フレームレートと同期する場合は、あなたがその行を削除する必要があります。

mDisplayLink.preferredFramesPerSecond = 60 ; 

最後に、あなたの更新/ PreRenderイベント/レンダリングコードをチェックすることもできます。処理に時間がかかる場合は、フレームをスキップします。

+0

申し訳ありませんが、私は2週間駅にいませんでした。あなたの助けに感謝します。あなたのフィードバックごとに、私はそれをデバイスでチェックしました。それはうまく動作します。もう一度ありがとう。 –

関連する問題