I am trying to keep my SKSpriteNodes moving at a constant speed forever, even after collisions. I have set gravity to 0, friction to 0, and linear and angular dampening to zero, but the Sprites still slowly slow down to zero velocity. How can I keep them moving?
Based on the answer below, this is what I have tried: EDIT This code below works! I just had to check if the nodes were going slower than the limit and speed them up.
[self enumerateChildNodesWithName:kBallName usingBlock:^(SKNode *node, BOOL *stop)
{
SKSpriteNode *ball = (SKSpriteNode *)node;
if (ball.physicsBody.velocity.dx < 0) {
if (ball.physicsBody.velocity.dx > -50)
ball.physicsBody.velocity = CGVectorMake(-50, ball.physicsBody.velocity.dy);
}
if (ball.physicsBody.velocity.dx > 0) {
if (ball.physicsBody.velocity.dx < 50)
ball.physicsBody.velocity = CGVectorMake(50, ball.physicsBody.velocity.dy);
}
if (ball.physicsBody.velocity.dy < 0) {
if (ball.physicsBody.velocity.dy > -50)
ball.physicsBody.velocity = CGVectorMake(ball.physicsBody.velocity.dx, -50);
}
if (ball.physicsBody.velocity.dy > 0) {
if (ball.physicsBody.velocity.dy > 50)
ball.physicsBody.velocity = CGVectorMake(ball.physicsBody.velocity.dx, 50);
}
}];
If you apply an impulse to a node's physics body it is only applied once. Think of kicking a ball. Applying a force on the other hand is like a continuos push, like an engine moving a car. Keep in mind that if you continue to apply force, your node will get faster and faster so you will have to assign a speed limit at some point. You can do that with something like this:
if(myNode.physicsBody.velocity.dx > 300)
myNode.physicsBody.velocity = CGVectorMake(300, myNode.physicsBody.velocity.dy);
That will limit your "moving right" speed to 300.
Another option is to move your node manually by changing it's position. You can do that by using something like myNode.position = CGPointMake(myNode.position.x+1, myNode.position.y);
. That will move your node to the right by 1 every time the code is run.
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