2017-02-24 22 views
3

私はかなり単純なゲームを持っています。それはaccelereometerを使用する古典的なLabyrinthゲームのようですが、ユーザーは3D Touchを使用して矩形のサイズを変更することもできます。SKSpriteNodeの位置を変更しているときにSKPhysicsBodyを変更する

プレイヤーのノードは、加速度計(ここでは何も特別な)からデータを取得し、世界の物理学のおかげで移動し、長方形である:

motionManager.startAccelerometerUpdates(to: OperationQueue.current!) { (data, error) in 
    if let motionData = data{ 
     self.physicsWorld.gravity = CGVector(dx: motionData.acceleration.x * 7, dy: motionData.acceleration.y * 7) 
    } 
} 

とtouchesMoved:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if let touch = touches.first{ 
      let maxForce = touch.maximumPossibleForce 
      let force = touch.force 

      let forceValue = force/maxForce 

      player.size = CGSize(width: 26-forceValue*16, height: 26-forceValue*16) 
      player.physicsBody = SKPhysicsBody(rectangleOf: player.size) 
    } 
} 

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
    resetSize() 
} 

func resetSize(){ 
    player.size = CGSize(width: 26, height: 26) 
} 

だから私は、変更されたときプレーヤーのサイズはうまくいきました。ノードはデバイスの向きに基づいて画面の周りを移動していましたが、大きく押すと小さくなっていました。問題はphysicsBody(GameViewController.swiftにview.showsPhysics = trueを設定しました)が常に同じであるため、player.physicsBody = SKPhysicsBody(rectangleOf: player.size)を追加しましたが、今度は画面を押すとプレーヤーのノードのサイズが変更されますが、移動も停止します。ノードのサイズと物理を同時に変更して動かす方法

答えて

1

あなたはphysicsBodyあなたは以前physicsBodyをinvovedすべての物理パラメータ失わ変更:あなたはvelocityangularVelocityまたは他の利用可能なパラメータをコピーすることができますが、それは十分ではありませんが、あなたが実際のバージョンに(SpriteKit枠組みので、継続性を持っていることはありません)このオプションはありません:ゲーム中にphysicsBodyを動的に変更してください。

ます。また physicsBodyを修正するために、ノードあなたのスケーリングを変更することができますが、あなたはいつもの例の場合と同様に、重力による蓄積速度を物理変数を失った

:これが起こったのスケーリング時のSpriteKit変更を自動的physicsBodyは保存せずに他人の体を作成するため、蓄積された特性。

あなたのボールに触れると、ボールが止まったときにphysicsBodyを変えることができるように、「フリーズタイム」のようなものを作成するのが私のアドバイスです。

+4

downvoteは解決策を示す必要があります(実際の物理量は実際の伝播時間であり、偽装されたものではありません)。OPを助けるために私の声明について反対の考え方を説明しようとします。 –

+0

凍結時間とはどういう意味ですか?私はサイズを変更したいときに私は動きを止めるべきです、そして、サイズが大丈夫の後で、ボールの動きを続けますか? – codddeer123

+0

これは唯一のアイデアですが、他のモードもあります。「Matrix」ムービーシーンのようなエフェクトを作成することができます(この状態の音楽の速度とゲーム要素のすべての動きを減らします)。 –

関連する問題