I want my sprites collisions and contacts to be detected, but I don't want them to move dynamically (I just need to know that they've touched).
didBeginContact(contact: SKPhysicsContact!) is only called if I set my player's physicsBody.dynamic to true. How can I get these delegate method calls without effecting the position or movement of my player?
You can pin objects on the screen, so you don't need to set the gravity to 0 (If you want to keep the gravity for other objects). Set the object up like this:
object.physicsBody.dynamic = true
object.physicsBody.affectedByGravity = false
object.physicsBody.pinned = true
With this setup your object can collide with other objects without moving.
The physicsBodys follow the physics world set up by my scene. When they collide, they interact with the physicsWorld, which has a default gravity that pulls them downward.
To fix this issue, in the init method of my Scene I set
self.physicsWorld.gravity = CGVectorMake(0, 0)
Dynamic still has to be set to true because I want the physics bodies to interact with the physics world, but I don't want the physics world to effect them, so this is the resolution.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With