序列中是否可以有if语句?

时间:2014-04-05 18:36:23

标签: ios iphone objective-c sprite-kit

只是尝试增强此代码的一部分,我想知道我是否可以在序列中包含if语句?当碎片数大于10时,我想减缓碎片的产生。

这是当前的代码:

-(void)spawnDebris {
    //debris
    SKSpriteNode * debris = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:@"debris1.png"] size:CGSizeMake(40, 40)];
    debris.zPosition = 1.0;

    debris.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:15];
    debris.physicsBody.allowsRotation = NO; 
    debris.physicsBody.categoryBitMask = CollisionDebris;

    RandomPosition = arc4random() %248;
    RandomPosition = RandomPosition + 34;
    debris.position = CGPointMake (RandomPosition, self.size.height + 40);

    [_debris addObject:debris];
    [self addChild:debris];

    //next Spawn:
    [self runAction:[SKAction sequence:@[
          [SKAction waitForDuration:2],
          [SKAction performSelector:@selector(spawnDebris) onTarget:self],
    ]]];

    if (_dead == YES) {
        [self removeAllActions];
    }

}

_debrisNSMutableArray的位置。所以基本上每2秒添加一次SKSpriteNodes,但要更改它,我希望在waitForDurations计数超过一定数量后更改_debris

这就是我的想法:

 //next Spawn:
    [self runAction:[SKAction sequence:@[
          [SKAction waitForDuration:2],
          [SKAction runBlock:^{
                 if (_debris.count > 10) {
                      [SKAction waitForDuration:7];
                 }
    }],
          [SKAction performSelector:@selector(spawnDebris) onTarget:self],
    ]]];

但这并没有奏效。甚至可以在序列中使用if语句吗?我怎样才能让它发挥作用?

3 个答案:

答案 0 :(得分:5)

代码无法运行,因为[SKAction waitForDuration:7]未执行。

更容易:

float time = 2.0;

if (_debris.count > 10) { time = 9.0; }

[self runAction:[SKAction sequence:@[
      [SKAction waitForDuration:time],
      [SKAction performSelector:@selector(spawnDebris) onTarget:self],
]]];

答案 1 :(得分:1)

该块声明waitForDuration动作,但从不在任何动作上运行。

尝试

   [self runAction:[SKAction sequence:@[
      [SKAction waitForDuration:2],
      [SKAction runBlock:^{
             if (_debris.count > 10) {
                  [self runAction:[SKAction waitForDuration:7]];
             }
}],
      [SKAction performSelector:@selector(spawnDebris) onTarget:self],
]]];

答案 2 :(得分:0)

为什么不使用随机数生成器来使其更有趣。

而不是if语句和所有这些,只需用arc4random()%x(<选择一个数字)替换2,它就会每隔x秒随机生成一次。