cocos2d-x 3.0에서 일정 시간 후에 람다 식 실행
cocos2d-x 3.0에서는 C++ 11에서 람다 식을 사용할 수 있지만 Node가 구현하고있는 schedule이나 scheduleOnce 메서드를 사용하면 schedule_selector라는 매크로를 사용하여 클래스에 구현 한 메서드를 콜백에 지정하지 않아도됩니다. 하지 말라.
예를 들어, 3초 후에 변수_flag에 false를 대입하고 싶을 때는 이런 것이 된다.
SomeClass.h
class SomeClass
{
private:
void someMethod();
void disableFlag(float d);
bool _flag = false;
}
SomeClass.cpp
void SomeClass::someMethod()
{
// 3秒後に_flagという変数にfalseを代入したい
this->scheduleOnce(schedule_selector(SomeClass::disableFlag), 3);
}
void SomeClass::disableFlag(float d)
{
this->setFlag(false);
_flag = n;
}
아무튼 이것 한 번만이라든지 용서할 수 없지는 않지만, 자주 일어나기 때문에 나의 분노가 유정천에 이르렀습니다.
DelayTime과 CallFunc 사용
그래서 뭔가 좋은 방법은 없을까 생각한 결과, 마찬가지로 Node가 구현하고 있는 runAction을 사용하는 방법을 생각해 냈습니다. runAction은 다양한 액션을 간단하게 실행할 수 있으므로 편리합니다만, 그 중에서도 시간을 늦추는 DelayTime와 인수 없음 std::function형의 콜백을 실행하는 CallFunc를 사용하면 됩니다. 이런 식으로.
SomeClass.cpp
void SomeClass::someMethod()
{
// 3秒後にラムダ式を実行
this->runAction(Sequence::create(DelayTime::create(3),CallFunc::create([this](){
this->_flag = false;
}), NULL));
}
모처럼이므로 이런 매크로를 만들었습니다.
#define call_after(callback, delay) \
runAction(Sequence::create(DelayTime::create(delay), CallFunc::create(callback), NULL))
void SomeClass::someMethod()
{
call_after([this](){ this->_flag = false; }, 3);
}
정말 기분이 좋습니다.
Reference
이 문제에 관하여(cocos2d-x 3.0에서 일정 시간 후에 람다 식 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/keroxp/items/ba15b1ab485b1b11eceb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
void SomeClass::someMethod()
{
// 3秒後にラムダ式を実行
this->runAction(Sequence::create(DelayTime::create(3),CallFunc::create([this](){
this->_flag = false;
}), NULL));
}
#define call_after(callback, delay) \
runAction(Sequence::create(DelayTime::create(delay), CallFunc::create(callback), NULL))
void SomeClass::someMethod()
{
call_after([this](){ this->_flag = false; }, 3);
}
Reference
이 문제에 관하여(cocos2d-x 3.0에서 일정 시간 후에 람다 식 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keroxp/items/ba15b1ab485b1b11eceb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)