2012-06-18 3 views
0

0시에서 0 시까 지 자동차 여행을하려고합니다. 그러나 나는 차가 움직이는 동안 명백한 딸꾹질이 전시에있는 것을 볼 수있다. 내가하는 일을 보여 드리겠습니다.Cocos2D- 하나의 작은 이미지가있는 프레임 속도 딸꾹질

저는 비 속성 (비 원자력, 강한) CCSprite 자동차를 가지고 있습니다. 초기화 방법은

나는 다음을 수행하십시오

self.car=[CCSprite spriteWithFileName:@"car.png"]; 
CGSize *windowSize=[[CCDirector sharedDirector] winSize]; 
CGSize carSize=car.contentSize; 
car.position=ccp(0-carSize.width/2,windowSize.height/2); 
[selp addChild:car]; 
[self schedule:@selecor(tick:) interval:0.5]; 

다음은 틱 방법 : 당신은 그냥 간단한 테스트 응용 프로그램의 참조로

-(void)tick:(ccTime)time{ 
[[self.car runAction:MoveBy actionWithDuration:time position:ccp(100,0)]; 
} 

. 이미지 "car.png"의 크기는 64x128입니다. AppDelegate.m에서 프레임 속도는 30FPS로 설정됩니다.

답변

1

우선, 스프라이트를 화면 테두리 밖으로 이동시키고 싶다면 0.5 초마다 새로운 액션을 시작하지 않고 하나의 동작 만 사용하십시오. 단일 조치를 작성할 수 있습니다. 또한 당신과 같은 방법으로 당신은 지연의 경우 문제가됩니다. 예를 들어 앱이 어떤 이유로 든 2 초의 지연 시간을 가지면 X 축에 의해 스프라이트가 100 포인트만큼 천천히 움직일 것입니다. 왜냐하면 항상 시간 측정기로 0.5를 받는다는 보장이 없기 때문입니다. 2 초 지연되는 경우 시간 = 2가 표시됩니다.

일종의 업데이트 방법으로 스프라이트를 이동하려면 액션이 아닌 setPosition을 사용하여 스프라이트의 위치를 ​​변경하는 것이 좋습니다. 예를 들어 스프라이트의 표시 위치를 실제 세계 (b2World 등)에서의 위치와 동기화하려는 경우 유용 할 수 있습니다. 또는 어떤 종류의 복잡한 움직임의 경우에. 예를 들어, 공식 sin (t) 또는 아르 키 메데스의 나선형을 사용한 이동의 경우.

+0

사실, 그것은 단지 하나의 차가 될 수는 없습니다. 끝이없는 자동차가 될 것이며 자동차 배열을 반복하고 위치를 업데이트 할 것입니다. 자동차가 계속 만들어지면 끊임없이 새로운 자동차를 확인하고 적절하게 이동해야합니다. –

+0

예를 들어, 몇 초에 한 번씩 방법을 예약하면 일부 위치에 자동차가 생기고 이동 액션이 실행되어 화면에서 제거됩니다. 그런 경우에 당신은 당신의 끝이없는 차를 얻을 것이다 – Morion

1

진드기 방법에서는 새로운 것을 실행하기 전에 이동 작업을 중지합니다. 또한 동작 시간에 '시간'을 사용하는 대신 .5f를 사용하십시오. 시간은 당신이 실제로이 틱에 대해 얻은 것입니다. 아마 .5 (내가 추측해야한다면 +/- 1/60 초)에서 벗어난 숫자 일 것입니다. 화면에 더 많은 물체가 있고 사용자 작업과 결합하여 예정된 방법으로받은 '시간'이 더 무작위가됩니다. 필자는 개인적으로 스케줄 된 방법으로 처리되는 두 개의 메타 이벤트 사이의 경과 시간을 계산하는 데에만 이것을 사용합니다.