我正在尝试构建我的第一个iOS swift游戏,我在检测对象之间的碰撞方面遇到了一些麻烦。 我有一些物体掉下来,另一个物体在屏幕的底部。 我想知道落下的物体何时接触另一个物体。 所以,这就是我所拥有的:
在我的场景类中(在我的init方法中):
player = SKSpriteNode(imageNamed: "playerImg")
player.position = CGPointMake(gameBoard.size.width/2, -(gameBoard.size.height + 55))
player.size = CGSize(width: 40,height: 40)
player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size)
player.physicsBody?.dynamic = false
player.physicsBody?.categoryBitMask = BodyType.bro.rawValue
player.physicsBody?.contactTestBitMask = BodyType.bro.rawValue
player.physicsBody?.affectedByGravity = true
在我自己的定制方法中(仍然在同一个场景类中):
let sprite = SKSpriteNode(texture: texture)
sprite.position = pointForColumn(block.column, row: block.row - 2)
block.sprite = sprite
sprite.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size)
sprite.physicsBody?.dynamic = false
sprite.physicsBody?.categoryBitMask = BodyType.bro.rawValue
sprite.physicsBody?.contactTestBitMask = BodyType.bro.rawValue
sprite.physicsBody?.affectedByGravity = true
这是我的BodyType枚举:
enum BodyType:UInt32 {
case bro = 1
case ground = 2
case anotherBody1 = 4
case anotherBody2 = 8
case anotherBody3 = 16
}
最后,在我的didMoveToView方法中,我有:
physicsWorld.contactDelegate = self
view.showsPhysics = true
所以,我看到我的对象周围的绿色边框,但是当他们触摸时我在didBeginContact方法中没有任何内容(这里附有截图)。 任何人,在发现碰撞时有一些想法是什么,以便触发?
答案 0 :(得分:1)
我明白了。 我不得不把
sprite.physicsBody?.dynamic = true
sprite.physicsBody?.affectedByGravity = false
之后,它就像一个魅力。
答案 1 :(得分:0)
您正在设置contactTestBitMask
,而不是collisionBitMask
。前者只是让SpriteKit通知你身体之间的联系,但在接触时物理模拟中没有任何改变。您需要后者才能使碰撞变成碰撞(并且要解决碰撞,使物体停止或相互反弹)。