Я использую следующий код для реализации щелчка по спрайтам в SpriteKit SKScene, чтобы они продолжали перемещаться и скользить по экрану в зависимости от движения пальца из UIPanGestureRecognizer.
По большей части это работает нормально, однако, когда я приближаюсь к краям видимой области экрана и пытаюсь этим жестом вывести спрайт за пределы экрана, он имеет противоположный эффект и толкает спрайт обратно к центру, а не за пределы экрана. .
Может ли кто-нибудь сказать мне, почему, когда спрайт находится слишком близко к краю экрана, он отталкивается назад, а не вылетает за пределы экрана, как ожидалось?
if (recognizer.state == UIGestureRecognizerStateEnded) {
if ([touchedNode.name isEqualToString:@"sprite"]) {
SKSpriteNode *touchedSprite = (SKSpriteNode *)touchedNode;
// Calculate the length of the velocity vector (i.e. the magnitude)
CGPoint velocity = [recognizer velocityInView:self.view];
CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y));
CGFloat slideMult = magnitude / 200;
NSLog(@"magnitude: %f, slideMult: %f", magnitude, slideMult);
// Calculate a final point based on the above
float slideFactor = 0.1 * slideMult; // Increase for more of a slide
CGPoint finalPoint = CGPointMake(recognizer.view.center.x + (velocity.x * slideFactor), recognizer.view.center.y - (velocity.y * slideFactor));
SKAction *moveAction = [SKAction moveTo:finalPoint duration:slideFactor * 2];
[moveAction setTimingMode:SKActionTimingEaseOut];
[touchedSprite runAction:moveAction];
}
}