Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SpriteKit detect collision without setting dynamic to true?

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?

like image 292
JuJoDi Avatar asked Jun 15 '14 00:06

JuJoDi


2 Answers

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.

like image 181
Mike_NotGuilty Avatar answered Nov 15 '22 18:11

Mike_NotGuilty


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.

like image 34
JuJoDi Avatar answered Nov 15 '22 19:11

JuJoDi