cocos2dxでのラムダ式のいくつかの使用法の予備的な要約

cocos2dxのラムダ式は非常に便利で、Objective Cのブロックと同様に、コールバック操作使用できます


1.実行中

auto mt = MoveTo::create(1, Vec2( 100, 100) );
auto cf = CallFunc::create( [](){
    CCLOG(" lambda test ");
});
auto seq = Sequence::createWithTwoActions( mt, cf);
sprite->runAction( seq );
実行中のプロセスは次のとおりです。移動が完了したら、「ラムダテスト」を出力します。


2.ボタン内

auto b = Button::create();
b->addTouchEventListener( [](Ref *pSender, Widget::TouchEventType type){
    if (type == Widget::TouchEventType::ENDED) {
        CCLOG(" lambda test ");
    }
});

 
 実行中のプロセスは次のとおりです。ボタンをクリックし、ボタン内で指を離して「ラムダテスト」を印刷します。 
 

注意:

(1)これは、この属性と関数を式で呼び出すことができることを意味します。式の外部で値変数を呼び出す場合は、[this、count]()を使用できます。値変数でない場合は、もちろん、[this、&param]を使用することもできますが、これは省略できます。ラムダの[]の特定の使用法は、Baiduにすることができます。

(2)ここでの式パラメータリストは上記と同じである必要があります。もちろん、仮パラメータ名は異なっていてもかまいません。

(3)式の時間タイプを判断するのが最善です。そうしないと、式が複数回呼び出される場合があります。

3.MenuItem内

auto ml = MenuItemLabel::create( Label::create() , [](Ref *pSender){
    CCLOG(" lambda test ");
});

実行中のプロセスは次のとおりです。ラベルをクリックして、「ラムダテスト」を印刷します。

注意:

(1)ここで時間タイプを判断する必要はなく、デフォルトはワンクリック応答です。

(2)ラムダ式に必要なパラメータのリストについては、ソースコードを参照してください。例は次のとおりです。

auto m2 = MenuItemLabel::create(cocos2d::Node *label, const ccMenuCallback &callback);
後でコールバックの定義を表示すると、次のことがわかります。

typedef std::function<void(Ref*)> ccMenuCallback;
これは、タイプRef *のパラメーターが必要であることを意味します。


4.スケジュールで

デフォルトのschedul関数には、ラムダバージョンがないようです(まだ見つけていません)。これを実装する別の方法は次のとおりです。

getScheduler()->schedule([](float dt){
    CCLOG("lambda test");
}, this, 0.5, false, "schedule lambda");

実行中のプロセスは次のとおりです。「ラムダテスト」は0.5秒ごとに出力されます。

注:ここには2つのバージョンのスケジュールがあり、必要に応じて使用できます。

おすすめ

転載: blog.csdn.net/woodengm/article/details/40617025