2011-01-24 4 views
0

예를 들어 구름이 오른쪽에서 벗어나면 화면의 왼쪽에서 돌아 오는 애니메이션을 만드는 방법에 대해 궁금합니다 화면의 측면애니메이션이 오른쪽에서 벗어나면 왼쪽에서부터 화면으로 돌아 오는 애니메이션 문제가 발생했습니다.

나는 clouds.center = CGPouintMake (clouds.center.x + cloudvelocity, clouds.center.y + cloudvelocity)로 시도했지만 왼쪽에서 오른쪽으로 그리고 쇠퇴 할 때만 만들 수 있습니다. 선.

다른 말로하면 ... 왼쪽에서 오른쪽으로 직선으로 이동하고 화면의 오른쪽 밖에있는 화면의 왼쪽에서 bac을 화면에 표시하는 데 문제가 있습니다.

아무도 도와 줄 수 있습니까?

답변

1

아마도 당신이 원하는 것은 모듈러 산술입니다. 이것은 일정량으로 나눈 나머지 부분을 물어 보는 것과 같습니다. 따라서, 예를 들어 :

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 픽셀의 개념적 둘러 감 영역을 사용하여 보이는 부분을 중간에 배치하십시오. 따라서 구름은 화면에서 완전히 오른쪽으로 이동 한 다음 아무도 화면을 볼 수 없게 왼쪽으로 이동하고 그면에서 다시 나타납니다.

관련 문제