【发布时间】:2015-01-15 04:04:08
【问题描述】:
func didBeginContact(contact: SKPhysicsContact) {
if ( contact.bodyA.categoryBitMask & BodyType.shield.rawValue ) == BodyType.shield.rawValue {
contact.bodyB.node?.removeFromParent()
counter++
println(counter)
} else if ( contact.bodyB.categoryBitMask & BodyType.shield.rawValue ) == BodyType.shield.rawValue {
contact.bodyA.node?.removeFromParent()
counter++
println(counter)
}
}
一个物理体来自纹理shield.physicsBody = SKPhysicsBody(texture: shieldTexture, size: shieldTexture.size())
另一个来自圈子sand.physicsBody = SKPhysicsBody(circleOfRadius: sand.size.width/2)
当两个对象相互接触时,sand.physicsBody = SKPhysicsBody(circleOfRadius: sand.size.width/2)
会被多次调用。我如何让它只为每个对象调用一次,即使我一接触它就从父对象中删除它。
【问题讨论】:
-
我相信这是按预期工作的,因为纹理中的主体可能会在内部生成多个形状,每个形状都可能导致接触事件。在物理模拟步骤结束之前,移除节点不会移除实体。您必须手动将节点或主体“标记”为已在此联系事件中处理,以便您可以跳过相同主体的任何后续联系事件。
-
我希望 SKPhysicsBody 有一个选项可以从纹理中通过参数进行设置,因此它的行为与例如来自 circleOfRadius 的 SKPhysicsBody 所以它只计算 1 次命中/接触,因为在某些情况下,这比创建任何额外的逻辑更需要,包括下面的答案。此外,如果不需要,它可以节省资源以不检测更多联系人..
标签: ios swift sprite-kit skphysicsbody