2012-07-03 5 views
0

속도 값을 float speed = 50;으로 스크롤합니다 배경에있는 스프라이트의 각도에 따라이 속도 값을 변경하여 모퉁이를 돌릴 때 스프라이트가 느려지는 것처럼 보입니다 . 모든 액세서와 뮤 테이터가 설정되었으므로 스프라이트 각속도에 따라 백그라운드 속도를 변경하는 수식을 계산할 수 없습니다. 여기 각속도에 따라 속도 변경

내 뮤 테이터입니다, 내가 제공하는 데 사용하는 어떤 공식 내게는이처럼 내 업데이트 방법의 모든 틱을 이동합니다 가치 :

다음
-(void) setSpeed:(float) value 
{ 
    Speed -= value; 
} 

실제로 내가 움직이는 배경을 얻기 위해 사용

-(void) update:(ccTime)delta 
{ 
    if (background.position.y < background2.position.y) 
    { 
     background.position = ccp(background.contentSize.width/2, background.position.y - speed * delta); 
     background2.position = ccp(background.contentSize.width/2, background.position.y + background.contentSize.height); 
    } 
    else 
    { 
     background2.position = ccp(background2.contentSize.width/2, background2.position.y - speed * delta); 
     background.position = ccp(background2.contentSize.width/2, background2.position.y + background.contentSize.height); 
    } 

    //reset 
    if (background.position.y <-background.contentSize.height/2) 
    { 
     background.position = ccp(background.contentSize.width/2 ,background2.position.y + background2.contentSize.height); 
    } 
    else if (background2.position.y < -background2.contentSize.height/2) 
    { 
     background2.position = ccp(background2.contentSize.width/2, background.position.y + background.contentSize.height); 
    } 
} 

아이디어가 있으십니까?

는 편집 :

나는 나를 시작 50에 속도를 초기화하는 것이 아니라, 배경의 속도 값은 플레이어 스프라이트의 회전에 의해 생성 된 공식을 완전히 결정할 수 있도록하는 것이 일을 더 나은 방법을 생각 수식에 대한 생각은?

+0

'V = 2 * 파이 * r * omega' –

+0

ω는 회전 각? – dev6546

+0

예, 그것을 잊어 버렸습니다. :) –

답변

1

수학 시간! : D

원하는 것은 회전 된 벡터의 y 구성 요소를 찾는 것입니다. 벡터의 속도는 당신의 속도 (일명 ​​속도)와 같습니다.

예고 알림 : SOH-CAH-TOA!

우리는 CAH 사용할 수 있습니다 : 코사인 (angleInRadians) = 인접/빗변 ...이 경우, 각이 알려져있다 (스프라이트 회전), 빗변이 알려져있다 (스프라이트의 시뮬레이션 속도) , 그리고 인접은 y 방향으로 당신의 배경의 알려지지 않은 속도입니다. 그래서, 우리는 코드에

... "인접"에 대한 해결 :

float spriteSpeed = 50.0; 
... 
float radians = -CC_DEGREES_TO_RADIANS(yourSprite.rotation); 
float backgroundYSpeed = cosf(radians) * spriteSpeed; 

당신은 동시에 수평 사인 사용하여 배경을 이동할 수 :

float backgroundXSpeed = sinf(radians) * spriteSpeed; 
+0

스프라이트 속도를 100으로 설정하면 스프라이트 회전이 상당히 빠르게 바뀔 수 있다는 점을 제외하고는 배경 속도를 인쇄하는 업데이트 방법의 출력을 확인하십시오. http : // pastebin .com/zNJPB373 이 부정적인 현상을 멈추고 더 많은 수학으로 크게 바뀔 수 있습니까? 각도 변경이 너무 크고 너무 빠르면 배경이 뒤로 움직입니다. 감사합니다 – dev6546

+1

@ 루이스 스프라이트가 "거꾸로"가리 키도록 회전하는 경우에만 음수가되어야합니다 ... 각도 변경으로 먹이지 않도록하십시오. 스프라이트의 현재 회전 cosf()를 입력하십시오. – MechEthan