Reputation: 171
I tested with a simple scene.
Func didBeginContact
can't be called.
I have try to use collisionBitMask
and s1.physicsBody = SKPhysicsBody(circleOfRadius: 100)
. The problem was persistent.
What can I do to fix it?
import SpriteKit
class Test2Scene: SKScene, SKPhysicsContactDelegate {
override func didMoveToView(view: SKView) {
physicsWorld.contactDelegate = self
physicsWorld.speed = 0
let s1 = SKSpriteNode(imageNamed: kImagePlayer)
s1.position = CGPointMake(100, 100)
s1.physicsBody = SKPhysicsBody(rectangleOfSize: s1.size)
s1.physicsBody?.categoryBitMask = 1
s1.physicsBody?.contactTestBitMask = 2
//s1.physicsBody?.collisionBitMask = 2
self.addChild(s1)
let s2 = SKSpriteNode(imageNamed: kImagePlayer)
s2.position = CGPointMake(100, 500);
s2.runAction(SKAction.moveToY(0, duration: 1))
s2.physicsBody = SKPhysicsBody(rectangleOfSize: s2.size)
s2.physicsBody?.categoryBitMask = 2
//s2.physicsBody?.collisionBitMask = 1
self.addChild(s2);
print("view did load")
}
func didBeginContact(contact: SKPhysicsContact) {
print("aaa")
}
func didEndContact(contact: SKPhysicsContact) {
print("bbb")
}
}
Upvotes: 1
Views: 213
Reputation: 171
Find out the reason. Need use
s1.physicsBody!.dynamic = true
s2.physicsBody!.dynamic = true
Upvotes: 0
Reputation: 13665
Your code is pretty much all wrong, but your offender is :
physicsWorld.speed = 0
From the docs:
The default value is 1.0, which means the simulation runs at normal speed. A value other than the default changes the rate at which time passes in the physics simulation. For example, a speed value of 2.0 indicates that time in the physics simulation passes twice as fast as the scene’s simulation time. A value of 0.0 pauses the physics simulation.
So setting it to 0.0 pauses the simulation. Second problem is that your nodes are affected by gravity but you move them using SKAction
. That way you are pulling the node out of physics simulation and you may experience weird behaviours.
Also I would recommend to read this great StackOverflow post about bitmasks and how they work / should be used.
Upvotes: 1