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宏可能是錯誤的,但我不確定。
問題。正在使用最小和最大冗餘?或者編譯器會知道選擇哪一個? – EvilAegis
不,您必須同時應用最小值/最大值,才能將位置限制爲特定的矩形。只有if/else是多餘的,因爲它們實際上表達了與MIN/MAX宏相同的內容(或者使用if/else,但沒有MIN/MAX宏,因爲在每個實例中已經知道例如y <0,然後只設置y = 0。 – LearnCocos2D