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 以下になります。

あなたが使用している1行-returnValue.yで、これは意味がありません。

MIN/MAX を正しく使用すれば、ここでは if/else が不要になるため、if/else を省略できます (読みやすくするために省略してください)。

于 2013-09-29T19:33:47.753 に答える