只是尝试增强此代码的一部分,我想知道我是否可以在序列中包含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];
}
}
_debris
是NSMutableArray
的位置。所以基本上每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语句吗?我怎样才能让它发挥作用?
答案 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秒随机生成一次。