2011-11-22 5 views
4

나는 cocos2d를 사용하여 미로 게임을 가지고있다. "friend"스프라이트를 저장할 수있는 하나의 메인 스프라이트가있다. "friend"스프라이트가 메인 스프라이트와 충돌하면, "friend"스프라이트가 모든 스프라이트를 따라 가게된다. 이제 "친구"스프라이트를 정적 거리와 부드러운 움직임으로 주 스프라이트를 따르는 방법을 알지 못합니다. 메인 스프라이트가 올라가면 "친구"가 메인 스프라이트 뒤에있을 것입니다. 메인 스프라이트가 왼쪽으로 이동하면 "friend"스프라이트가 메인 스프라이트 오른쪽에 표시됩니다. 나를 도와 주시고 일부 코드를 공유하십시오 ...Cocos2d 다른 스프라이트를 따라 하나의 스프라이트를 만드는 방법은 무엇입니까?

+0

box2d, chipmunk 또는 일반 cocos2d를 사용 하시겠습니까? 일반 cocos2d라면 애니메이션을 사용하여 이동하거나 픽셀 단위로 이동 하시겠습니까? –

답변

3

기본 스프라이트의 위치를 ​​friend 스프라이트의 대상으로 사용하여 다음과 같은 동작을 구현할 수 있습니다. 이것은 분리 (최소 거리 유지), 응집력 (최대 거리 유지) 및 여유 (부드럽게 만들기)를 구현하는 것입니다.

정확한 알고리즘 (및 기타 자세한 내용)은 wonderful behavior animation paper by Craig Reynolds입니다. 또한 개별 기능에 대한 비디오와 예제 소스 코드 (C++)가 있습니다.

당신이 필요로하는 알고리즘은 (는 여러 간단한 것들의 조합이다) Leader following

편집입니다 : 내가 볼 수있는 소스 코드 herehere와 신문에 언급 된 알고리즘이 간단 구현을 발견했다. 무리 짓기 (주로 중심을 따르는 것)에서 단일 리더를 따라갈 때까지 약간 재결합해야합니다. 언어는 Processing과 유사하며 java와 유사한 의사 코드와 유사하므로 이해가 문제가되지 않아야합니다. 앞에서 언급 한 C++ sourcecode도 다운로드 할 수 있지만 리더에게 다음과 같은 기능은 명시 적으로 제공하지 않습니다.
나는 cocos2d 구현을 알고 있지 않습니다.

+0

나에게 몇 가지 코드를 공유 할 수 있습니까 ??? 예, 정확히 말하지만 알고리즘이나 코드를 찾을 수 없습니다 –

+0

@Alex 답변에 대한 몇 가지 소스 링크가 추가되었습니다. – kostja

1

나는 잘 작동하는 간단한 해결책을 가지고 있습니다. cocos2d 문서의 레슨 2를 시작하십시오 (Your first game). 터치 이벤트를 구현 한 후 cocosGuy를 따라 seeker1을 설정하려면 다음 코드를 사용

- (void) nextFrame:(ccTime)dt { 

    float dx = cocosGuy.position.x - seeker1.position.x; 
    float dy = cocosGuy.position.y - seeker1.position.y; 
    float d = sqrt(dx*dx + dy*dy); 
    float v = 100; 

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

아이디어는 모든 단계에있다, 추종자는 일정한 속도로 리더쪽으로 이동해야합니다. 지시선 방향은 코드에 표시된대로 계산할 수 있습니다.

관련 문제