참고 : http://injakaun.tistory.com/102
1. Schedule의 종류
스케쥴는 총 6개의 종류가 있습니다.
schedule(SEL_SCHEDULE selector);
가장 일반적인 방법으로 타이머에서 호출할 메소드만 지정하는 방법입니다. 타이머가 호출되는 시간은 처음 cocos2d-x을 실행할 때 지정한 fps의 속도를 빠릅니다. 일반적으로 1초의 60번의 fps로 지정하고 있습니다. ftp의 지정는 AppDelegate.cpp 파일에 있습니다.
schedule(SEL_SCHEDULE selector, float interval)
이 방법은 호출할 메소드와 간격을 지정하는 방법입니다. 이때에는 fps로 지정된 시간이 아닌 interval로 지정된 시간마다 메소드가 호출됩니다. 단, 인터벌의 시간은 fps시간보다 빠를수 없습니다. 지금 메인 fps가 1초에 10번 그리는 건데, 스케쥴의 인터벌을 0.05초인 일초에 20번 호출되게 지정을 해도 결국 fps의 속도 만큼은 1초에 10번만 호출되게 됩니다. 즉, 스케쥴의 인터벌 간격은 fps의 간격을 기본으로해서 설정됩니다.
schedule(schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay)
이 방법은 메소드, 인터벌 뿐만 아니라, 타이머가 불리는 횟수와 처음 타이머가 호출되는 시간을 지정할 수 있습니다.
그래서 스케쥴을 실행하면, delay로 정한 시간만큼 기다리고 있다가 실행되고, 그리고 인터벌 간격마다 리피트 횟수 만틈 호출됩니다. 그래서 결국 호출되는 횟수는 리피트로 지정한 횟수보다 한번 더 호출됩니다.
scheduleOnce(SEL_SCHEDULE selector, float delay)
이 방법은 딜레이로 지정한 시간만큼만 기다렸다가 딱 한번만 메소드를 호출하는 방법입니다.
scheduleUpdate()
이 방법은 첫번째 방법과 거의 비슷하지만, 여기서는 호출할 메소드 이름조차 지정하지 않습니다. 즉, 따로 메소드를 지정하지 않아도 update(float delta)라는 메소드가 자동으로 호출됩니다.
scheduleUpdateWithPriority(int priority)
위에 있는 scheduleUpdate()과 거의 동일한데 우선순위를 정할 수 있는 방법입니다. 우선 순위는 숫자가 적을수록 먼저 실행되며, 동시에 여러개의 scheduleUpdate()를 사용해야 할 경우 사용하면 유용합니다.
2. SEL_SCHEDULE selector
스케쥴에서 SEL_SCHEDULE 셀럭테로 호출해야 할 메소드를 지정하며 사용방법은 아래와 같이 사용하면 됩니다.
HelloWorld::update(float delta) 메소드를 호출 할 경우
this->schedule(schedule_selector(HelloWorld:update));
위와 같이 일반적인 셀렉터를 사용하는 방법과 동일합니다. 일반적으로 스케쥴에서 호출하는 메소드는 deleta라는 값을 매개변수로 받고 있습니다. 이 변수에는 스케쥴이 호출되는 시간간격이 들어옵니다. 셀렉터를 부를 때에는 당연히 ()부분과 매개변수를 빼고 메소드 이름만 입력합니다.
3. unschedule()
더 이상 스케쥴을 사용하지 않을 경우에는 unschedule() 메소드를 사용해서 스케쥴일 해제합니다.
unschedule(SEL_SCHEDULE selector)
호출한 메소드를 지정해서 해당되는 스케쥴일 해제하는 방법입니다.
unscheduleAllSelectors()
호출한 모든 스케쥴일 해제하는 방법입니다.
unscheduleUpdate()
scheduleUpdate() 스케쥴만 해제하는 방법입니다.