cocos2d-x 3.0에서 일정 시간 후에 람다 식 실행

4484 단어 C++cocos2d-x
게임을 만들고 있으면 일정 시간 후에 특정 처리를 넣고 싶은 경우가 있다.
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);
}


정말 기분이 좋습니다.

좋은 웹페이지 즐겨찾기