2013-09-29 1 views
1

Я пытаюсь проверить, останется ли мой 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 может быть неправильным, но я не уверен.

ответ

1

Точно, вы перепутали MIN/MAX. Строка MIN(x, 0) вернет нижнее значение x или 0, что означает, что результат будет 0 или меньше.

В одной строке вы используете -returnValue.y, что не имеет смысла.

Вы можете (и должны для чтения) опустить if/else, потому что MIN/MAX, если он используется правильно, сделать, если/else здесь не нужно.

+0

Вопрос. Использует BOTH min и max избыточно? Или компилятор знает, какой из них выбрать? – EvilAegis

+0

Нет, вы должны применять MIN/MAX один за другим, чтобы ограничить местоположение определенным прямоугольником. Только if/else избыточно, потому что они выражают в основном то же самое, что и макросы MIN/MAX (или используют if/else, но без макросов MIN/MAX, поскольку вы уже знаете в каждом экземпляре, например y <0, а затем просто устанавливаете y = 0. – LearnCocos2D

 Смежные вопросы

  • Нет связанных вопросов^_^