首页 > 解决方案 > 多个序列上的 runAction

问题描述

这是我的代码:

if (sprite != NULL)
{
    delay1 = CCDelayTime::create(1.5f);
    delay2 = CCDelayTime::create(3.0f);
    brickdelete = CallFunc::create([this]()
    {
        sprite->setOpacity(0);
        sprite->getPhysicsBody()->removeFromWorld();
    });
    brickcreate = CallFunc::create([this]()
    {
        sprite->setOpacity(255);
        sprite->setPhysicsBody(brickbody);
    });
    disintegratefunction = CallFunc::create([this]() {
        sprite->runAction(disintegrateAnim);
    });
    appearfunction = CallFunc::create([this]() {
        sprite->runAction(appearAnim);
    });
    runAction(Sequence::create(disintegratefunction, delay1, brickdelete, delay2, appearfunction, brickcreate, NULL));
}

我想同时发生多个 runAction 实例。目前,如果我在另一个正在进行时启动 runAction,我会收到多个断言失败,并且第一个序列中的剩余操作被添加到第二个 runAction 序列中(因此第一个主体在序列的某个阶段仍然不完整)。

我希望它们彼此独立。这可能吗?我也尝试了targetedaction,但我不确定代码是否良好,因为它具有相同的结果。

标签: c++cocos2d-x

解决方案


Sequence将一个接一个地运行一个动作,同时运行你需要使用的动作Spawn

Spawn 与 Sequence 非常相似,不同之处在于所有操作将同时运行。您可以拥有任意数量的 Action 对象,甚至是其他 Spawn 对象!

所以在你的例子中:

if (sprite != NULL)
{
    delay1 = CCDelayTime::create(1.5f);
    delay2 = CCDelayTime::create(3.0f);
    brickdelete = CallFunc::create([this]()
    {
        sprite->setOpacity(0);
        sprite->getPhysicsBody()->removeFromWorld();
    });
    brickcreate = CallFunc::create([this]()
    {
        sprite->setOpacity(255);
        sprite->setPhysicsBody(brickbody);
    });
    disintegratefunction = CallFunc::create([this]() {
        sprite->runAction(disintegrateAnim);
    });
    appearfunction = CallFunc::create([this]() {
        sprite->runAction(appearAnim);
    });
    runAction(Spawn::create(disintegratefunction, delay1, brickdelete, delay2, appearfunction, brickcreate));
}

参考: http: //www.cocos2d-x.org/docs/cocos2d-x/en/actions/sequences.html


推荐阅读