1

我正在尝试检查我的 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 宏的使用可能是错误的,但我不确定。

4

1 回答 1

1

确实,您混淆了MIN / MAX。该行将MIN(x, 0)返回 x 或 0 的较低值,这意味着结果将为 0 或更小。

在您使用的一条线上,-returnValue.y这没有任何意义。

您可以(并且应该为了可读性)省略 if/else,因为 MIN/MAX 如果使用正确,则此处不需要 if/else。

于 2013-09-29T19:33:47.753 回答