2016-09-22 13 views
1

私は2つのSkSpritenodesを追加したGameScene.sksを持っています。このコードは、トランポリンのオブジェクトに物理的なボディーなどを与えますが、実行するとその状態になります。最初のトランポリンだけが体を持っています。Spritekit |スイフト3 | GameScene.sks - 物理プロパティは1つのSKSpritodeodeにのみ適用されます

なぜ同じ名前のすべてのノードに適用されないのでしょうか?

//Trampoline 
var trampoline: SKSpriteNode?  

override func didMove(to view: SKView) { 
trampoline = childNode(withName: "trampoline") as? SKSpriteNode 
      trampoline?.physicsBody = SKPhysicsBody.init(rectangleOf: (trampoline?.size)!) 
      trampoline?.physicsBody?.affectedByGravity = false 
      trampoline?.physicsBody?.isDynamic = false 
      trampoline?.physicsBody?.usesPreciseCollisionDetection = true 
      trampoline?.physicsBody?.restitution = 1 
} 

答えて

3
childNode(withName: "trampoline") as? SKSpriteNode 

は、あなたが、あなたのtrampoline変数に割り当てるtrampolineと呼ばれる単一のノードを返します。あなたはトランポリンと呼ばれるすべてのノードを列挙し、その物理学のボディを設定する必要があります。例えば。

enumerateChildNodesWithName("trampoline") { trampolineNode, _ in 
    trampolineNode?.physicsBody = SKPhysicsBody.init(rectangleOf: (trampolineNode?.size)!) 
    trampolineNode?.physicsBody?.affectedByGravity = false 
    trampolineNode?.physicsBody?.isDynamic = false 
    trampolineNode?.physicsBody?.usesPreciseCollisionDetection = true 
    trampolineNode?.physicsBody?.restitution = 1 
} 

これに気をつけてください; .isDynamic; 「偽」の場合、身体は衝突や接触に関与しません。

+0

trampolineNodeはSKNodeとして扱われています。したがって、物理的ボディのTrampolineNode?.sizeは機能しません。どのようにしてtrampolineNodeをSKSpritenodeと宣言できますか? – user3482617

+0

心配しないで、それを理解しました。 trampoline.physicsBody = SKPhysicsBody.init(rectangleOf:CGSize(width:(trampoline.frame.size.width/2)、height:(trampoline.frame.size.height/2)) – user3482617

+1

にPhysicsボディステートメントを修正するだけでした。 @ user3482617良いですが、 'let trampoline = trampolineNode as SKSpriteNode'という名前でキャストすることもできます。これは、enumerateChildNodeがSKNodesだけを返すため非常に一般的です。 –

関連する問題