我正在尝试制作一个具有3个RotateBy Action 的序列。

第一个RotateBy Action ,带有ANCHOR_MIDDLE_TOP
使用ANCHOR_MIDDLE进行第二次RotateBy操作

使用ANCHOR_MIDDLE_BOTTOM进行第三次RotateBy操作

但是,我不知道如何按以下顺序运行此序列

  • mySprite->setAnchorPoint(Point::ANCHOR_MIDDLE_TOP);
  • 将mySprite旋转90度
  • mySprite->setAnchorPoint(Point::ANCHOR_MIDDLE);
  • 将mySprite旋转90度
  • mySprite->setAnchorPoint(Point::ANCHOR_MIDDLE_BOTTOM);
  • 将mySprite旋转90度

  • 而Sequence::create只采取 Action 。

    最佳答案

    您可以将CallFunc用作操作,并调用一个函数来更改子画面的 anchor 。像这样:

    cocos2d::Sequence::create(cocos2d::RotateBy::create(1.0f, 90.0f),
        cocos2d::CallFunc::create(MySprite::changeAnchorPoint),
        cocos2d::RotateBy::create(1.0f, 90.0f),
        cocos2d::CallFunc::create(MySprite::changeAnchorPoint),
        cocos2d::RotateBy::create(1.0f, 90.0f),
        cocos2d::CallFunc::create(MySprite::changeAnchorPoint));
    

    编辑:发送参数,您应该可以编写如下内容:
    cocos2d::CallFunc::create([mySprite]() {
        mySprite->setAnchorPoint(Point::ANCHOR_MIDDLE_TOP);
    });
    

    注意: CallFunc想要一个没有参数的函数,但是您可以通过使用c++ 11 lambda语法捕获要在函数中使用的对象来解决该问题。

    关于c++ - 具有不同 anchor 的Cocos2d-x 3.0旋转序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23584571/

    10-11 18:18