2015-11-20 13 views
6

私のゲームでは、配列からランダムオブジェクトを作成する関数を数秒ごとに呼び出す必要があります。現在、私はこのようSKActionすることにより、このオブジェクトを移動しています:SpriteKit - ランダムオブジェクトを作成し、deltatimeを使って移動する

func createRandmoObject() { 
    let random = arc4random_uniform(4) 
    randomObject = randomObjects[random] 

    randomObject.runAction(SKAction.moveTo(CGPoint(x: randomObject.position.x, y: 0 - randomObject.size.height), duration: 3)) 

    addChild(randomObject) 

} 

とオブジェクトは、それが削除される選手に当たったとき、その関数が再び呼び出されます。この方法の問題は、オブジェクトの動きが常にスムーズではなく、何らかの理由でフレームレートが低下したときに、むらが発生することです。今、私は更新メソッドのデルタ時間を計算する方法を知っていますが、オブジェクトに変更を適用して常に画面に表示されるのではなく、オブジェクトに適用する方法がわかりません。それらを敵として、別の敵を作成する別の機能があります)どうすればこれらのランダムなオブジェクトをSKActionの代わりにdeltatimeに従って動かすことができますか?

+0

SpriteKitは、物理的に可変の時間ステップを使用します。残念ながら、デルタ時間が長い場合、オブジェクトは「ジャンプ」するように見えます。これを行わない(つまり、フレームレートに依存しないモーションを維持する)場合は、更新メソッドでノードの位置を増やすなど、ノードの物理を手動で計算する必要があります。基本的には、独自の物理エンジンを作成する必要があります。 –

+0

"update"の位置を手動で増やすことはできますが、ノードが常に存在するとは限らない場合、どのように実行するかは、スポーン間で数秒かかります。 – Abdou023

+0

そして、以前のノードがまだそこにあるときに新しいノードが生成されることがあります。 – Abdou023

答えて

0

spritekitプロジェクトでSKActionを使用することはできますが、ゲームが物理に基づいている場合は、すべてのスプライトの移動にupdateメソッドを使用する必要があります。 SKactionsはシンプルなゲームでは大丈夫ですが、あなたのゲームに衝突やランダムな動きが含まれている場合は、更新メソッドが必要です。

関連する問題