J.Treutlein
J.Treutlein

Reputation: 983

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.

Upvotes: 2

Views: 563

Answers (1)

Confused
Confused

Reputation: 6288

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.

Upvotes: 2

Related Questions