我有3个精灵,它们可以相互碰撞并具有contactTestBitMask
并categoryBitMask
设置。我有两个精灵,使用didBeginContact
方法来查看它们是否发生碰撞,并且工作正常,但是现在我不确定如何设置它以检查多个对象的接触并运行取决于两个物体碰撞的不同函数。
我的PhysicsCategory
:
struct PhysicsCategory {
static let None: UInt32 = 0
static let All: UInt32 = UInt32.max
static let Bird: UInt32 = 0b1
static let Cloud: UInt32 = 0b10
static let Desk: UInt32 = 0b100
static let Star: UInt32 = 0b101
static let StarSpecial: UInt32 = 0b110
}
中的didBeginContact
方法GameScene
:
func didBeginContact(contact: SKPhysicsContact) {
var BirdBody: SKPhysicsBody?
var DeskBody: SKPhysicsBody?
var SpecialStarBody: SKPhysicsBody?
//var SpecialStarBody: SKPhysicsBody
if contact.bodyA.categoryBitMask == PhysicsCategory.Bird {
BirdBody = contact.bodyA
DeskBody = contact.bodyB
} else if contact.bodyA.categoryBitMask == PhysicsCategory.Desk {
BirdBody = contact.bodyB
DeskBody = contact.bodyA
} else if contact.bodyA.categoryBitMask == PhysicsCategory.StarSpecial {
SpecialStarBody = contact.bodyA
}
if (DeskBody != nil) {
birdSprite.BirdDidCollideWithDesk(BirdBody?.node as! Bird, desk: DeskBody?.node as! Desk, scoreClass: scoreClass, scoreLabel: scoreLabel)
}
}
我要检查的是鸟儿是否与桌子接触,在这种情况下,它应该运行鸟儿和桌子的功能,否则我想看看鸟儿是否与SpecialStar接触,我还没有我为这种情况写了一个函数,但是稍后,我将为这种情况调用一个不同的函数。我还要添加一些其他的sprite,因此,如果有人可以解释如何做到这一点,以使代码写得好而不引起任何错误,我将不胜感激。
您可以检查鸟儿是否与办公桌接触
if ((contact.bodyA.categoryBitMask == PhysicsCategory.Bird && contact.bodyB.categoryBitMask == PhysicsCategory.Desk) ||
(contact.bodyA.categoryBitMask == PhysicsCategory.Desk && contact.bodyB.categoryBitMask == PhysicsCategory.Bird)) {
print("Bird, desk")
// Handle contact bird with desk
}
鸟与明星接触
if ((contact.bodyA.categoryBitMask == PhysicsCategory.Bird && contact.bodyB.categoryBitMask == PhysicsCategory.StarSpecial) ||
(contact.bodyA.categoryBitMask == PhysicsCategory.Desk && contact.bodyB.categoryBitMask == PhysicsCategory.StarSpecial)) {
print("Bird, StarSpecial")
// Handle contact bird with StarSpecial
}
请注意:变量应以小写字母开头。
为了保持代码清晰,我建议为每个节点创建类文件。
import Foundation
import SpriteKit
class Monster: SKSpriteNode {
init(world: SKNode) {
super.init(texture: SKTexture(imageNamed: "MonsterImageName"), color: UIColor.clearColor(), size: CGSizeMake(world.frame.size.width / 18, world.frame.size.width / 36))
position = CGPointMake(world.frame.size.width / 2, world.frame.size.height / 2)
zPosition = 100
// etc
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
并像这样添加
var monster = Monster.init(world)
world.addChild(monster)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句