Search code examples
swiftsprite-kitskphysicsbody

Swift 3 (SpriteKit): Making a projectile move


I was wondering how to apply a force or thrust to a projectile (specifically an SKSpriteNode) to make it continuously move until it hits something. I have tried some ways like setting the velocity like this:

let node = SKSpriteNode(imageNamed: "node")
node.physicsBody = SKPhysicsBody(rectangleOf: node.size)
node.physicsBody.velocity = CGVector(dx: 5, dy: 5)

or instead of changing the node's velocity value at the end, I tried:

node.physicsBody?.applyImpulse(CGVector(dx: 5, dy: 5))

or

node.physicsBody?.applyForce(CGVector(dx: 5, dy: 5))

None of these actually move the projectile. I have even tried adding the same impulse and force forever each frame with an SKAction and there is still no movement. I would really appreciate any help :) Thanks.


Solution

  • Try adding a sure fire dynamism to the object:

    let node = SKSpriteNode(imageNamed: "node")
    node.physicsBody = SKPhysicsBody(rectangleOf: node.size)
    // add this, to ensure dynamism:
    node.physicsBody.isDynamic = true
    

    Now all forces and impulses should work. Although I'd suggest using much larger numbers. Depends on the size and mass of the object, but you might need numbers a couple of orders of magnitude higher to get rapid movement.