아마도 당신이 원하는 것은 모듈러 산술입니다. 이것은 일정량으로 나눈 나머지 부분을 물어 보는 것과 같습니다. 따라서, 예를 들어 :
28 mod 6 = 4
퍼센트는 정수 나머지 연산자이지만, 부동 소수점 숫자는 (단 정밀도 수레를 걸립니다 및 반환) (소요 반환 배로한다) 또는 fmodf
라이브러리 방법 fmod
를 호출해야 . 예 :
NSLog(@"%0.0f", fmodf(28.0f, 6.0f));
로그가 '4'가됩니다.
경우에 따라 위치가 계속 변경되지만 결과를 특정 창 크기로 제한하려고합니다. 1024 포인트를 가정하면 1024 + n 위치가 2048 + n, 3072 + n 등과 같은 위치 n과 동일하게되기를 원합니다. 그런 다음 원하는 것은 나머지로만 나눌 때 나머지를 유지하는 것입니다 예, 예.
clouds.center = CGPointMake(fmodf(clouds.center.x + cloudvelocity, 1024.0f),
fmodf(clouds.center.y + cloudvelocity, 768.0f))
또는 뷰 크기가 어떻든간에.
첫 번째 잠재적 인 문제는 음수가 원하는 방식으로 작동하지 않는다는 것입니다. 예 : (- (+ 23.0f 1024.0f) - 관련의 fmodfs있는 그대로 (+ 23.0f 2048.0f) 등)
fmodf(-23.0f, 1024.0f));
는 -23.0f이다. 0보다 작은 값을 확인하고 1024.0f를 얻으면이를 처리하여 처리 할 수 있습니다.
당신은 당신의 계산 된 값이 음수 갈 수 있지만, 결코 더 후 부정적인 1024.0f보다 그냥 할 수 있다는 것을 알고있는 경우 :
clouds.center = CGPointMake(fmodf(1024.0f + clouds.center.x + cloudvelocity, 1024.0f),
fmodf(768.0f + clouds.center.y + cloudvelocity, 768.0f))
분명하기 때문에 1024.0f의 추가가 결과의 경우에는 영향을주지 않습니다 숫자는 양수입니다. fmodf를 두 번 호출하는 것을 신경 쓰지 않는다면 :
clouds.center = CGPointMake(
fmodf(1024.0f + fmodf(clouds.center.x + cloudvelocity, 1024.0f), 1024.0f),
fmodf(768.0f + fmodf(clouds.center.y + cloudvelocity, 768.0f), 768.0f))
모든 입력 값에 적용됩니다.
두 번째 잠재적 인 문제는 클라우드의 중심 만 감싸는 것입니다. 따라서 화면의 한쪽에서 다른쪽으로 점프 할 수 있습니다. 화면의 한쪽에만 구름이 있고 다른 한쪽에 절반의 구름이 없을 것입니다.클라우드가 화면 폭보다 작다고 가정 할 때 가능한 해결책은 (i) 클라우드 중심이 화면 모 드점보다 크거나 그렇지 않으면 1024 픽셀 오른쪽에서 두 번째 중 하나를 왼쪽으로 1024 픽셀 씩 두 번째 구름으로 그립니다. (ii) 미덕을 만들고, 예를 들어 1024보다 2048 픽셀의 개념적 둘러 감 영역을 사용하여 보이는 부분을 중간에 배치하십시오. 따라서 구름은 화면에서 완전히 오른쪽으로 이동 한 다음 아무도 화면을 볼 수 없게 왼쪽으로 이동하고 그면에서 다시 나타납니다.