Я пытаюсь проверить, останется ли мой SKSpriteNode в границах экрана во время жест перетаскивания. Я дошел до такой степени, что почти уверен, что моя логика к решению проблемы правильная, но моя реализация неверна. В принципе, прежде чем игрок перейдет из перевода, программа проверяет, не находится ли она в границах. Вот мой код:Сохранение SKSpriteNode в границах экрана
-(CGPoint)checkBounds:(CGPoint)newLocation{
CGSize screenSize = self.size;
CGPoint returnValue = newLocation;
if (newLocation.x <= self.player.position.x){
returnValue.x = MIN(returnValue.x,0);
} else {
returnValue.x = MAX(returnValue.x, screenSize.width);
}
if (newLocation.y <= self.player.position.x){
returnValue.y = MIN(-returnValue.y, 0);
} else {
returnValue.y = MAX(returnValue.y, screenSize.height);
}
NSLog(@"%@", NSStringFromCGPoint(returnValue));
return returnValue;
}
-(void)dragPlayer: (UIPanGestureRecognizer *)gesture {
CGPoint translation = [gesture translationInView:self.view];
CGPoint newLocation = CGPointMake(self.player.position.x + translation.x, self.player.position.y - translation.y);
self.player.position = [self checkBounds:newLocation];
}
По какой-то причине мой плеер уходит с экрана. Я думаю, что мое использование макросов MIN & MAX может быть неправильным, но я не уверен.
Вопрос. Использует BOTH min и max избыточно? Или компилятор знает, какой из них выбрать? – EvilAegis
Нет, вы должны применять MIN/MAX один за другим, чтобы ограничить местоположение определенным прямоугольником. Только if/else избыточно, потому что они выражают в основном то же самое, что и макросы MIN/MAX (или используют if/else, но без макросов MIN/MAX, поскольку вы уже знаете в каждом экземпляре, например y <0, а затем просто устанавливаете y = 0. – LearnCocos2D