Siu*_*han 4 objective-c game-physics sprite-kit swift
在SpriteKit中,我们检测了didBeginContact方法.但是做这样的事情看起来有点愚蠢:func didBeginContact(contact:SKPhysicsContact){
if let contactA = contact.bodyA.node?.name {
if let contactB = contact.bodyB.node?.name {
//now that we have safely unwrapped these nodes, we can operate on them
if contactA == "ball" {
collisionBetweenBall(contact.bodyA.node!, object: contact.bodyB.node!)
} else if contactB == "ball" {
collisionBetweenBall(contact.bodyB.node!, object: contact.bodyA.node!)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以确保bodyA永远是一个球吗?有没有与categorybitmask相关的规则?
如果您使用的是简单类别,每个物理主体只属于一个类别,则didBeginContact的这种替代形式可能更具可读性:
func didBeginContact(contact: SKPhysicsContact) {
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
switch contactMask {
case categoryBitMask.ball | categoryBitMask.something:
print("Collision between ball and something")
let ballNode = contact.bodyA.categoryBitMask == categoryBitMask.ball ? contact.bodyA.node! : contact.bodyB.node!
ballNode.pop()
score += 10
default :
//Some other contact has occurred
print("Some other contact")
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的类别更复杂,这将不起作用,因为简单的AND tests(categoryBitMask.ball | categoryBitMask.something)将不匹配.
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |