2016-07-07 7 views
2

私は自分のシーンで修正されたアップデートがあるシナリオを持っています。スプライトキット物理:固定アップデートを使用できますか?

私が更新するたびに、スプライトの前の位置を使用してシャドーを作りたいと思います。いずれかの私はスプライトにインパルスを適用すると

func update(currentTime: NSTimeInterval) 
{ 
    shadow.position = sprite.position 
} 

は今、私はスプライトは関係なく、実際には次の更新のフレームを取得するために使用されたどのくらいの時間のステップと同じ数をインクリメントします。

しかし、私のシミュレータのシャドウとデバイスのシャドウを比較したときと同じように、2つの間の距離は非常に異なります。

E.G.スプライトを60ステップ移動するには1秒間かかりました スプライトを60ステップ移動するためにシミュレータを2秒かかりました

固定された更新の世界です。両方とも達成するために60フレームを要し、 シミュレータがちょうど遅れました。

実際の結果は、しかし、120でシミュレータを入れますが

ステップ私は私が更新を固定になるだろう期待してSKViewasynchronousを無効にすることを試みたが、それはどこにも私を得ないので、誰もが知っていれば私が求めていますSKPhysicsを固定アップデートフレームワークで動作させる方法

+0

、 'currentTime'引数と更新の間の時間差を計算して良い方法ではありません。この違い – Kametrixom

+1

によって動きをスケーリング、あなたはすでに影を制約していないのはなぜ – Knight0fDragon

+1

の遅れのマシンの努力を倍増していますスプライトに? –

答えて

1

、それはあなたのために有用であることができれば、私は、私はあなたがこのパラメータを知っているかなり確信して、わからないんだけど、多分あなたは気づいていない:

if let scene = GameScene(fileNamed:"GameScene") { 
      // Configure the view. 
      let skView = self.view as! SKView 
      skView.showsFPS = true 
      skView.showsPhysics = true 
      skView.showsNodeCount = true 

      skView.frameInterval = 1 // real devices 
      #if (arch(i386) || arch(x86_64)) && os(iOS) 
       skView.frameInterval = 2 // <- this one 
      #endif 

      /* Sprite Kit applies additional optimizations to improve rendering performance */ 
      skView.ignoresSiblingOrder = true 
      /* Set the scale mode to scale to fit the window */ 
      scene.scaleMode = .ResizeFill 
      skView.presentScene(scene) 
     } 

/* Number of hardware vsyncs between callbacks, same behaviour as CADisplayLink. Defaults to 1 (render every vsync) */ 
     public var frameInterval: Int 

ドキュメント:これは公式のは、Apple document SA

ですy:

デフォルト値は1です。この結果、ディスプレイの更新頻度は になります。値が より大きい値に1より大きい値に設定されている場合、ディスプレイリンクはゲームの最新リフレッシュレートの一部である を通知します。たとえば、間隔を2に設定すると、 シーンが1フレームおきに呼び出され、フレームレートが半分になります。

この値を1未満に設定すると、定義されていない動作が発生し、 プログラマのエラーです。

+0

残念ながら、あなたがやっている唯一のことは、更新呼び出し間の時間を増やすことです。デルタ時間に基づいて再計算する必要がなく(この時点で努力を倍増させて、貴重なサイクルを無駄にするため)、固定の更新が本当に必要です。基本的には、デルタ時間は常に16.6666666ミリ秒と考えられます。現在のように、非常に高速なデバイスであっても、デルタ時間は更新ごとに数ミリ秒ごとに変化する可能性があります。 – Knight0fDragon

+0

私が思っている唯一のもう一つの点は、Cocos2Dソース(詳細はCCScheduler.m)ですcocos2dのアップデート方法については、こちらを参照してください。https://github.com/Maxim-Filimonov/conways_gol_ios/blob/master/ConwaysGOL.spritebuilder/Source/libs/cocos2d-iphone/cocos2d/CCScheduler.m –

+0

Cocoas2dはスプライトキットではありません。私はココア2dを使用しません。問題はココア2dについてではありません。目標は、SKPhysicsを一定の更新方法で動作させることです。 (技術的に、もし私がSprite Kitのアップデートを真の一貫性のある仕方で動作させることができれば、dTimeは16.6666で、それは金色になります) – Knight0fDragon

関連する問題