Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode Spritekit | Swift 3 | GameSecene.sks-物理属性仅应用于一个SKSpritenode_Xcode_Sprite Kit_Swift3 - Fatal编程技术网

Xcode Spritekit | Swift 3 | GameSecene.sks-物理属性仅应用于一个SKSpritenode

Xcode Spritekit | Swift 3 | GameSecene.sks-物理属性仅应用于一个SKSpritenode,xcode,sprite-kit,swift3,Xcode,Sprite Kit,Swift3,我有一个GameSecene.sks,在这里我添加了两个SkSpritenodes,都叫蹦床。代码给蹦床对象一个物理实体等,但当运行时。只有第一个蹦床有身体 知道为什么它不能应用于所有同名节点吗 //Trampoline var trampoline: SKSpriteNode? override func didMove(to view: SKView) { trampoline = childNode(withName: "trampoline") as? SKSprite

我有一个GameSecene.sks,在这里我添加了两个SkSpritenodes,都叫蹦床。代码给蹦床对象一个物理实体等,但当运行时。只有第一个蹦床有身体

知道为什么它不能应用于所有同名节点吗

//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
}
只返回一个名为
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
属性;如果为“假”,身体将不会发生碰撞或接触。

蹦床节点将被视为一个节点。因此,蹦床?物理体的尺寸不起作用。我怎么能宣布蹦床是SKSpritenode呢?没关系,算了吧。只需将Physics body语句的长度改为trampoline.physicsBody=SKPhysicsBody.init(矩形:CGSize(宽度:(trampoline.frame.size.width/2),高度:(trampoline.frame.size.height/2))@用户3482617很好。您还可以使用“let trampoline=trampolineNode as!SKSpriteNode”将其强制转换为!SKSpriteNode”,这非常常见,因为enumerateChildNode只返回SKNodes。
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
}