【问题标题】:SKSpriteNode action wait for complete another actionSKSpriteNode 动作等待完成另一个动作
【发布时间】:2014-06-07 23:30:51
【问题描述】:

我有一些带有动作的节点,像这样:

SKSpriteNode *randomSprite = [SKSpriteNode spriteNodeWithImageNamed:spriteName];
SKAction *action = [SKAction moveToY:0 duration:3.5];
[randomSprite runAction:[SKAction repeatAction:action count:1]];

在代码的某个地方(不是在我首先创建的地方)我用另一个动作创建新节点

SKSpriteNode *anotherSprite = [SKSpriteNode spriteNodeWithImageNamed:spriteName];
SKAction *action = [SKAction moveToY:0 duration:0.5];
[anotherSprite runAction:[SKAction repeatAction:action count:1]];

但是只有当第一个节点完成他的动作时我才需要开始第二个节点的动作我怎么能做到?

【问题讨论】:

    标签: sprite-kit skspritenode skaction


    【解决方案1】:

    你可以在一个单独的方法中拥有第二个精灵,比如说

    -(void)secondSpriteAction:(SKSpriteNode*)secondSprite{
      SKAction *action = [SKAction moveToY:0 duration:0.5];
      [secondSprite runAction:[SKAction repeatAction:action count:1]];
    }
    

    并在第一个精灵的动作中为此方法制作一个选择器

    SKAction *performSelector = [SKAction performSelector:@selector(secondSpriteAction:) onTarget:self];
    

    然后你可以添加

    SKAction *sequence = [SKAction sequence:@[action,performSelector]];
    

    不要重复动作,而是重复序列

    [randomSprite runAction:[SKAction repeatAction:sequence count:1]];
    

    所以是这样的:

    SKSpriteNode *randomSprite = [SKSpriteNode spriteNodeWithImageNamed:spriteName];
    SKAction *action = [SKAction moveToY:0 duration:3.5];
    SKAction *performSelector = [SKAction performSelector:@selector(secondSpriteAction:) onTarget:self];
    SKAction *sequence = [SKAction sequence:@[action,performSelector]];
    [randomSprite runAction:[SKAction repeatAction:sequence count:1]];
    

    【讨论】:

      【解决方案2】:

      您可以将completion 块用于runAction:

      SKSpriteNode *randomSprite = [SKSpriteNode spriteNodeWithImageNamed:spriteName];
      SKAction *action = [SKAction moveToY:0 duration:3.5];
      
      [randomSprite runAction:[SKAction repeatAction:action count:1] completion:^{
      
          SKSpriteNode *anotherSprite = [SKSpriteNode spriteNodeWithImageNamed:spriteName];
          SKAction *action = [SKAction moveToY:0 duration:0.5];
          [anotherSprite runAction:[SKAction repeatAction:action count:1]];
      
      }];
      

      如果您需要在代码中的其他位置初始化 anotherSprite,您可以将其放在另一个方法中,如 Lamikins 建议的,并从完成块中调用该方法。

      阅读runAction: completion: 方法here

      【讨论】:

        猜你喜欢
        • 2017-06-22
        • 2017-04-18
        • 1970-01-01
        • 2015-06-24
        • 2020-07-06
        • 2020-11-21
        • 2015-11-24
        • 2019-11-06
        • 2016-04-08
        相关资源
        最近更新 更多