gpt4 book ai didi

ios - 将 SKSpriteNode 保持在屏幕范围内

转载 作者:行者123 更新时间:2023-11-29 13:03:56 26 4
gpt4 key购买 nike

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

最佳答案

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

在一行中,您使用的是 -returnValue.y,这毫无意义。

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

关于ios - 将 SKSpriteNode 保持在屏幕范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19080248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com