【问题标题】:What does "Ref* pSender" do in Call Back function?“Ref* pSender”在回调函数中有什么作用?
【发布时间】:2017-03-14 09:22:33
【问题描述】:

所以我注意到Ref* pSender 出现在许多回调函数中,我想知道下面的代码:

1) 它是什么?

2) 它来自哪里?我没有在 lambda 之外定义它。

3) 它有哪些用途?

mFamilyTV = MenuItemImage::create("en_block5.png", "en_block5_hover.png",
        [=](Ref* pSender) {
        auto jump = JumpBy::create(1.0, Vec2(0, 0), 100, 1);
        mFamilyTV->runAction(jump);
    });

非常感谢您的关注和帮助:)

【问题讨论】:

    标签: c++ event-handling cocos2d-x


    【解决方案1】:

    1) 它是什么?

    它是触发 lambda 函数的项目。在你的情况下,你的mFamilyTV

    2) 它来自哪里?我没有在 lambda 之外定义它。

    稍后执行 lambda 的单元将通过它。

    3) 它有哪些用途?

    它使您能够将相同的功能附加到多个实例,并且仍然知道哪个实例触发了它。假设您有一个 lambda,可以在单击按钮时将背景设置为红色。您可以将它附加到 15 个按钮上,如果您对它进行了正确编程(在这种情况下,更改 pSender 的颜色而不是命名按钮),它适用于所有 15 个按钮。以及任何数量的其他按钮,即使您甚至没有在编译时知道它们,并且在您的程序中没有它们的变量名。

    【讨论】:

    • 那么我可以在创建另一个按钮时将pSender 保存在另一个 lambda 中以供以后使用(即附加到您的示例中的其他按钮),否则将在上述 lambda 结束时立即释放/删除?如果是的话,你能教我怎么做吗?提前致谢。
    • 你不应该在 lambda 表达式之外使用它,因为不能保证它会发生什么。如果你认为你需要它,你可能想问另一个问题,因为你不应该在 lambda 表达式之外使用它。这就是您的实际变量 mFamilyTV 的用途。
    【解决方案2】:

    在您的情况下,Ref* pSendermFamilyTV。它是一个发送者,触发了菜单项点击。 Ref 是一个非常基础的类来支持自动释放功能。您可以将其转换回 MenuItemImage。

    这里可以查看MenuItemImage的继承图:

    http://www.cocos2d-x.org/reference/native-cpp/V3.0alpha0/d1/d30/classcocos2d_1_1_menu_item_image.html

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 2012-05-06
      • 2012-04-23
      • 2020-01-27
      • 2021-09-03
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      相关资源
      最近更新 更多