iOS Swift didBeginContact没有被调用 [英] iOS Swift didBeginContact not being called
问题描述
过去两天我一直在努力让两个SKSpriteNodes注册碰撞并引发 didBegin#contact
。
我已将其位掩码设置为 categoryBitMask
, contactTestBitMask
和 collisionTestBitMask
。
我还设置了 动态
'属性都设为' true
'
我只希望 原来是一个简单的问题。在我的原始代码中,我像这样设置SKPhysicsBody检测框的参数: 类似地,我对测试物理碰撞的第二个节点执行相同的操作。 只需删除 centre:参数,如下所示: 两个Sprite节点解决了该问题,这些节点现在相互碰撞并推入像预期的那样把自己放在一边。 I have been struggling for the past two days to get two SKSpriteNodes to register a collision and evoke I've set their bit masks ' I've also set the ' All I'm expecting is that
It turned out to be a simple problem. In my original code I was setting parameters for the SKPhysicsBody detection frame like so: Similarly I was doing the same for the second node that I was testing physics collisions for. Simply removing the 'centre:' parameters like so: for the two sprite nodes solved the problem and the nodes now crash into each other and push themselves aside as expected. 这篇关于iOS Swift didBeginContact没有被调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋! initPhysics()$ c $ p>
didBegin#Contact
是
//设置Physicsbody位掩码
让playerCarBitMask:UInt32 = 0x1<< ; 1
让slowCarBitMask:UInt32 = 0x1<< 2
// initPhysics
func initPhysics(){
println((((((((((发起Physicalbody))))))))))))))))))
self.physicsWorld.contactDelegate =自我
self.physicsWorld.gravity = CGVector.zeroVector
println( self.physicsWorld.contactDelegate = \(self.physicsWorld.contactDelegate))
}
// setupPlayer
func setupPlayer(){
汽车= SKSpriteNode(imageNamed: redCarUp)
car.setScale(2.0)
car.position = CGPoint(x:800,y:400)
汽车.zPosition = 100
car.name = car
gameNode.addChild(car)
let carBody = SKPhysicsBody(
angleOfSize:汽车。 frame.size,center:car.position)
carBody.dynamic = true
carBody.categoryBitMask = playerCarBitMask
carBody.contactTestBitMask = slowCarBitMask
carBody.mass = 5
carBody.collisionBitMask = slowCarBitMask
car.physicsBody = carBod y
println( carBody = \(carBody))
println( carBody.dynamic = \(carBody.dynamic))
println( carBody。 mass = \(carBody.mass))
println( carBody.categoryBitMask = \(carBody.categoryBitMask))
println( carBody.contactTestBitMask = \(carBody.contactTestBitMask) )
println( carBody.collisionBitMask = \(carBody.contactTestBitMask))
slowCar = SKSpriteNode(imageNamed: blueCarUp)
slowCar.setScale(2.0)
让slowCarScenePos = CGPoint(
x:680,
y:2048)
slowCar.position = gameNode.convertPoint( slowCarScenePos,fromNode:自我)
println( slowCar.position = \(slowCar.position)****)
slowCar.zPosition = 80
slowCar.name = slowCar
让slowCarBody = SKPhysicsBody(
angleOfSize:slowCar.frame.size,center:slowCar.position)
println( slowCar = \(slowCar)**** )
slowCarBody.dynamic = true
slowCarBody.categoryBitMask = slowCarBitMask
slowCarBody.contactTestBitMask = playerCarBitMask
slowCarBody.mass = 5
slowCarBody.collisionBitMask = playerCarBitMask
slowCar.physicsBody = slowCarBody
gameNode.addChild(slowCar)
}
func didBeginContact(contact:SKPhysicsContact !){
println( ******************* PhysicsContact ******************** )
}
let carBody = SKPhysicsBody(
angleOfSize:car。 frame.size,center:car.position)
let carBody = SKPhysicsBody(rectangleOfSize:car.frame.size)
didBegin#contact
.categoryBitMask
', 'contactTestBitMask
' and 'collisionTestBitMask
' for both objects.dynamic
' property for both to 'true
'initPhysics()
seems to set up the physicsWorld okay.didBegin#Contact
is called, but it is not//Set up Physicsbody bit masks
let playerCarBitMask: UInt32 = 0x1 << 1
let slowCarBitMask: UInt32 = 0x1 << 2
//initPhysics
func initPhysics() {
println("(((((((((((((( Initiating Physicsbody ))))))))))))))")
self.physicsWorld.contactDelegate = self
self.physicsWorld.gravity = CGVector.zeroVector
println("self.physicsWorld.contactDelegate = \(self.physicsWorld.contactDelegate)")
}
//setupPlayer
func setupPlayer() {
car = SKSpriteNode(imageNamed: "redCarUp")
car.setScale(2.0)
car.position = CGPoint(x: 800, y: 400)
car.zPosition = 100
car.name = "car"
gameNode.addChild(car)
let carBody = SKPhysicsBody(
rectangleOfSize: car.frame.size, center: car.position)
carBody.dynamic = true
carBody.categoryBitMask = playerCarBitMask
carBody.contactTestBitMask = slowCarBitMask
carBody.mass = 5
carBody.collisionBitMask = slowCarBitMask
car.physicsBody = carBody
println("carBody = \(carBody)")
println("carBody.dynamic = \(carBody.dynamic)")
println("carBody.mass = \(carBody.mass)")
println("carBody.categoryBitMask = \(carBody.categoryBitMask)")
println("carBody.contactTestBitMask = \(carBody.contactTestBitMask)")
println("carBody.collisionBitMask = \(carBody.contactTestBitMask)")
slowCar = SKSpriteNode(imageNamed: "blueCarUp")
slowCar.setScale(2.0)
let slowCarScenePos = CGPoint(
x: 680,
y: 2048)
slowCar.position = gameNode.convertPoint(slowCarScenePos, fromNode: self)
println("slowCar.position = \(slowCar.position) ****")
slowCar.zPosition = 80
slowCar.name = "slowCar"
let slowCarBody = SKPhysicsBody(
rectangleOfSize: slowCar.frame.size, center: slowCar.position)
println("slowCar = \(slowCar) ****")
slowCarBody.dynamic = true
slowCarBody.categoryBitMask = slowCarBitMask
slowCarBody.contactTestBitMask = playerCarBitMask
slowCarBody.mass = 5
slowCarBody.collisionBitMask = playerCarBitMask
slowCar.physicsBody = slowCarBody
gameNode.addChild(slowCar)
}
func didBeginContact(contact: SKPhysicsContact!) {
println("*******************PhysicsContact********************")
}
let carBody = SKPhysicsBody(
rectangleOfSize: car.frame.size, center: car.position)
let carBody = SKPhysicsBody(rectangleOfSize: car.frame.size)