Xcode Spritekit | Swift 3 | GameSecene.sks-物理属性仅应用于一个SKSpritenode
我有一个GameSecene.sks,在这里我添加了两个SkSpritenodes,都叫蹦床。代码给蹦床对象一个物理实体等,但当运行时。只有第一个蹦床有身体 知道为什么它不能应用于所有同名节点吗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
//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
}