joshd и Андрей Гордеев оба правильны, с решением Гордеева изложив, что функция делает hypotf.
Но функция квадратного корня является дорогостоящей функцией. Вы должны будете использовать его, если вам нужно знать фактическое расстояние, но если вам нужно только относительное расстояние, вы можете пропустить квадратный корень. Возможно, вам захочется узнать, какой спрайт ближе или ближе, или просто если любые спрайты находятся в радиусе. В этих случаях просто сравните квадрат расстояния.
- (float)getDistanceSquared:(CGPoint)p1 and:(CGPoint)p2 {
return pow(p2.x - p1.x, 2) + pow(p2.y - p1.y, 2);
}
Для того, чтобы использовать эту функцию для вычисления, если какие-либо спрайтов находятся в пределах радиуса от центра вида в обновлении: метод подкласса SKScene:
-(void)update:(CFTimeInterval)currentTime {
CGFloat radiusSquared = pow (self.closeDistance, 2);
CGPoint center = self.view.center;
for (SKNode *node in self.children) {
if (radiusSquared > [self getDistanceSquared:center and:node.position]) {
// This node is close to the center.
};
}
}
Использование '(p2.x-p1.y) * (p2.x-p1.y)' может быть большим улучшением производительности над 'pow', потому что' pow' предназначен для двух пар. – Tim
, вы можете использовать 'powf', который принимает два поплавка. – Austin
Это отличный трюк, который мне никогда не приходило в голову! Благодарю. – colinta