Reputation: 1564
I have a SKSpriteNode, which is a ball. My view don't have gravity. I'm able to move the ball by applying an impulse over it in the start and I want to make it to move to the user touch point which we can get in -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event method without affecting its motion.
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *touch in touches)
{
CGPoint location = [touch locationInView:self.view];
SKAction *moveToPoint = [SKAction moveByX:location.x y:location.y duration:2];
[ball runAction:moveToPoint];
}
}
Its not seems to be working. Help me guys.
Upvotes: 1
Views: 510
Reputation: 20274
If you want to send the node directly to a point use the method:
[SKAction moveTo:location duration:2];
The SKAction moveBy:
method moves the node by the x and y values provided, whereas the moveTo
method to the point in the node's parent.
EDIT:
Also, change the line:
CGPoint location = [touch locationInView:self.view];
to
CGPoint location = [touch locationInNode:self];
A UIView has a different coordinate system than a SKScene.
EDIT 2: You can remove affect of physics while touch exists
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *touch in touches)
{
ball.physicsBody.dynamic = NO;
CGPoint location = [touch locationInNode: self];
SKAction *moveToPoint = [SKAction moveTo:location duration:2];
[ball runAction:moveToPoint];
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
ball.physicsBody.dynamic = YES;
}
Upvotes: 1