· 스케줄은 타이머의 개념이라고 보시면 편합니다. 사용자가 지정한 시간 간격으로 함수를 실행시키는 것에 간편합니다.
· 스케줄 함수의 기본형
: schedule(schedule_selector(헤더명::함수명));
※ 스케줄로 실행할 대상 함수는 매개변수에 float형 변수를 1개 포함해야 합니다.
· 헤더에서 사용할 함수들을 미리 선언해줍니다.
void anyTime(float a);
void everySecond(float b);
void Once(float c);
// float에서 a든 b든 상관없습니다.
1. 상시 실행되는 스케줄
this->schedule(schedule_selector(scheduleTest::anyTime));
void scheduleTest::anyTime(float a)
{
log("항시 실행되는 스케줄 함수입니다.");
}
콘솔창에 log값이 계속 출력됩니다.
2. 일정시간 간격으로 실행되는 스케줄
this->schedule(schedule_selector(scheduleTest::everySecond), 1.0f);
// 1.0f = 1초 간격으로. 2.0f면 2초 간격으로
void scheduleTest::everySecond(float b)
{
log("1초 간격으로 실행되는 스케줄 함수입니다.");
}
콘솔창에 1초 간격으로 log값이 출력됩니다.
3. 일정시간 경과한 후 1회만 실행하는 스케줄
this->scheduleOnce(schedule_selector(scheduleTest::Once), 1.0f);
void scheduleTest::Once(float c)
{
log("지정한 시간이 지난 후에 한번 실행되는 스케줄 함수입니다.");
}
콘솔창에 1초 후 log값이 한 번 출력됩니다.
4. 스케줄의 다양한 사용 방법
· 시작, 일시정지, 재시작, 정지 기능을 소개해드릴건데 사전작업이 필요합니다.
· 폰트로 아이템을 생성하고, 그 메뉴아이템으로 메뉴를 생성합니다.
auto scheduleItem1 = MenuItemFont::create("시작", CC_CALLBACK_1(scheduleTest::Start, this));
auto scheduleItem2 = MenuItemFont::create("일시정지", CC_CALLBACK_1(scheduleTest::Pause, this));
auto scheduleItem3 = MenuItemFont::create("재시작", CC_CALLBACK_1(scheduleTest::Resume, this));
auto scheduleItem4 = MenuItemFont::create("정지", CC_CALLBACK_1(scheduleTest::Stop, this));
auto scheduleMenu = Menu::create(scheduleItem1, scheduleItem2, scheduleItem3, scheduleItem4, nullptr);
// 메뉴 아이템들을 수직정렬 해줍니다.
scheduleMenu->alignItemsVertically();
· 헤더에 선언한 함수 초기화. 메뉴아이템과 결합하여 사용합니다.
위에서 사용한 everySecnod함수를 재사용하겠습니다.
void scheduleTest::everySecond(float b)
{
log("1초 간격으로 실행되는 스케줄 함수입니다.");
}
① 시작(start)
// 시작 메뉴버튼을 누르면 everySecond 스케줄이 할당됩니다.
void scheduleTest::Start(Ref * Sender)
{
// 스케줄 등록
this->schedule(schedule_selector(scheduleTest::everySecond), 1.0f);
}
② 일시정지(pause)
// 일시정지 메뉴버튼을 누르면 스케줄이 일시정지 됩니다.
void scheduleTest::Pause(Ref * Sender)
{
Director::getInstance()->getScheduler()->pauseTarget(this);
}
③ 재시작(resume)
// 재시작 메뉴버튼을 누르면 일시정지된 스케줄이 재시작됩니다.
void scheduleTest::Resume(Ref * Sender)
{
Director::getInstance()->getScheduler()->resumeTarget(this);
}
④ 정지(unschedule)
// 정지 메뉴버튼을 누르면 스케줄이 정지됩니다.
void scheduleTest::Stop(Ref * Sender)
{
// 간단하게 schedule 대신에 unschedule을 써주시면 됩니다.
this->unschedule(schedule_selector(scheduleTest::everySecond));
}'Cocos2d-x' 카테고리의 다른 글
| 7. 키보드(Keyboard) (0) | 2021.08.28 |
|---|---|
| 6. 애니메이션(Animation) (0) | 2021.08.28 |
| 4. 액션(Action) (0) | 2021.08.17 |
| 3. Menu (0) | 2021.08.07 |
| 2. Label, Font (0) | 2021.08.06 |