2012-05-17 5 views
1

두 개의 스프라이트가 있습니다. 하나는 "트랙"이고 다른 하나는 뒤따라옵니다. 나는 이미 그 일을했습니다, 그래서 물고기는 스크린 주위의 거품을 따를 것입니다 (방향으로 움직일뿐만 아니라 그쪽으로 움직일 것입니다). 여기에 그림이 어떻게 작동하는지에 있고 난 일이 원하는 : 나는 멀리 거품 센터에서 내 물고기 올바른 (X, Y)를 "버퍼"방법을 알아 내려고 노력하고있어두 개의 스프라이트 사이에 거리 버퍼 만들기

enter image description here

, 그러나 나는 어떻게 잘 모르겠다. 여기에 내 코드입니다, 그것은 (초 60 *) 일정에 따라 실행 :

- (void) nextFrame:(ccTime)dt { 

    float dx = bubble.position.x - fish.position.x; 
    float dy = bubble.position.y - fish.position.y; 
    float d = sqrt(dx*dx + dy*dy); 
    float v = 200; 

    if (d > 1){ 
     fish.position = ccp(fish.position.x + dx/d * v *dt, 
           fish.position.y + dy/d * v *dt); 
    } else { 
     fish.position = ccp(bubble.position.x, bubble.position.y); 
    } 

    float angle = CC_RADIANS_TO_DEGREES(atan2f(dx, dy)); 
    angle -= 90; 

    fish.rotation = angle; 
    if(bubble.position.x < fish.position.x){ 
     fish.flipY = YES; 
    } else { 
     fish.flipY = NO; 
    } 
} 

어떤 아이디어 또는 감사 도움이됩니다. 감사합니다

+0

안녕하세요, 다이어그램 작성에 사용하는 것을 물어봐도 될까요? – akuritsu

답변

1

솔루션의 씨앗을 이미 0으로 나누기 체크에 넣었습니다. 물고기가 더 먼 거리에서 움직이기를 원하지 않으므로 d에서 조건을 변경하십시오. 첫 번째 if/else를 다음으로 바꿉니다.

if (d > radiusOfBubblePlusRadiusOfFish){ 
    fish.position = ccp(fish.position.x + dx/d * v *dt, 
          fish.position.y + dy/d * v *dt); 
} 

다른 모든 항목은 그대로 유지하십시오.

+0

와우, 정말 어떻게 그리워했는지 모르겠어, 고마워! – user339946

0

물고기의 중심으로 물고기의 위치보다는 오히려 입 앞에 위치를 계산하지 마십시오.

그래서 fish.position + offset = bubble.position까지 이동하십시오.

관련 문제