Swift SpriteKit iOS - 碰撞:didBeginContact 用于一个精灵,而不是其他精灵
Swift SpriteKit iOS - Collisions: didBeginContact for one sprite, and not for others
我需要能够 运行 为一个精灵执行 didBeginContact(),但对于另一个精灵,不要 运行 它(但仍会与其发生碰撞)。
这是我目前所拥有的:
enum ColliderType: UInt32 {
case Player = 1
case Wall = 2
case ScreenBoundary = 3
}
屏幕边界(我不希望这个 运行 didBeginContact())
self.physicsWorld.contactDelegate = self
self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
self.physicsBody!.categoryBitMask = ColliderType.ScreenBoundary.rawValue
self.physicsBody!.contactTestBitMask = ColliderType.Player.rawValue
玩家(运行 didBeginContact() 如果与 ColliderType.Wall 发生碰撞)
player!.physicsBody!.categoryBitMask = ColliderType.Player.rawValue
player!.physicsBody!.contactTestBitMask = ColliderType.Wall.rawValue
player!.physicsBody!.collisionBitMask = ColliderType.Wall.rawValue
墙壁(运行 didBeginContact() 如果与 ColliderType.Player 发生碰撞)
wallSprite.physicsBody!.categoryBitMask = ColliderType.Wall.rawValue
wallSprite.physicsBody!.contactTestBitMask = ColliderType.Player.rawValue
wallSprite.physicsBody!.collisionBitMask = ColliderType.Player.rawValue
希望这是有道理的,因为 SpriteKit 碰撞不适合我。
谢谢!
托比.
你应该做的就是在你的 didBeginContact() 方法中添加一个条件,在你的情况下,你应该添加以下内容来检查:
func didBeginContact(contact: SKPhysicsContact) {
let other = contact.bodyA.categoryBitMask == ColliderType.Player.rawValue ? contact.bodyB : contact.bodyA
switch other.categoryBitMask {
case ColliderType.ScreenBoundary.rawValue:
println("Hit Screen!")
case ColliderType.Wall.rawValue:
println("Hit Wall!")
default:
break
}
}
我需要能够 运行 为一个精灵执行 didBeginContact(),但对于另一个精灵,不要 运行 它(但仍会与其发生碰撞)。 这是我目前所拥有的:
enum ColliderType: UInt32 {
case Player = 1
case Wall = 2
case ScreenBoundary = 3
}
屏幕边界(我不希望这个 运行 didBeginContact())
self.physicsWorld.contactDelegate = self
self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
self.physicsBody!.categoryBitMask = ColliderType.ScreenBoundary.rawValue
self.physicsBody!.contactTestBitMask = ColliderType.Player.rawValue
玩家(运行 didBeginContact() 如果与 ColliderType.Wall 发生碰撞)
player!.physicsBody!.categoryBitMask = ColliderType.Player.rawValue
player!.physicsBody!.contactTestBitMask = ColliderType.Wall.rawValue
player!.physicsBody!.collisionBitMask = ColliderType.Wall.rawValue
墙壁(运行 didBeginContact() 如果与 ColliderType.Player 发生碰撞)
wallSprite.physicsBody!.categoryBitMask = ColliderType.Wall.rawValue
wallSprite.physicsBody!.contactTestBitMask = ColliderType.Player.rawValue
wallSprite.physicsBody!.collisionBitMask = ColliderType.Player.rawValue
希望这是有道理的,因为 SpriteKit 碰撞不适合我。 谢谢! 托比.
你应该做的就是在你的 didBeginContact() 方法中添加一个条件,在你的情况下,你应该添加以下内容来检查:
func didBeginContact(contact: SKPhysicsContact) {
let other = contact.bodyA.categoryBitMask == ColliderType.Player.rawValue ? contact.bodyB : contact.bodyA
switch other.categoryBitMask {
case ColliderType.ScreenBoundary.rawValue:
println("Hit Screen!")
case ColliderType.Wall.rawValue:
println("Hit Wall!")
default:
break
}
}