SKAction:如何生成节点生成随机延迟

我使用下面的一段代码来定期生成SKNode。 有没有办法使这些SKNodes的生成周期是随机的。 具体来说,我如何使下面的代码中的“delayFish”具有随机延迟的行为?

[self removeActionForKey:@"fishSpawn"]; SKAction* spawnFish = [SKAction performSelector:@selector(spawnLittleFishes) onTarget:self]; SKAction* delayFish = [SKAction waitForDuration:3.0/_moving.speed]; SKAction* spawnThenDelayFish = [SKAction sequence:@[spawnFish, delayFish]]; SKAction* spawnThenDelayFishForever = [SKAction repeatActionForever:spawnThenDelayFish]; [self runAction:spawnThenDelayFishForever withKey:@"fishSpawn"]; 

ObjC:

首先设置平均延迟和范围…

 #define kAverageDelay 2.0 #define kDelayRange 1.0 // vary by plus or minus 0.5 seconds 

然后改变你的delayFish行动到这…

 SKAction* delayFish = [SKAction waitForDuration:kAverageDelay withRange:kDelayRange]; 

迅速:

首先设置平均延迟和范围…

 let averageDelay:TimeInterval = 2.0 let delayRange:TimeInterval = 1.0 // vary by plus or minus 0.5 seconds 

然后改变你的delayFish行动到这…

 let delayFish = SKAction.wait(forDuration:averageDelay, withRange:delayRange) 

插入一个随机的浮动,而不是一个固定的。

在你的情况下是这样的:

 double value = ((double)arc4random() / ARC4RANDOM_MAX) * (maxValue - minValue) + minValue; SKAction* delayFish = [SKAction waitForDuration:value/_moving.speed]; 

我懂了。 这不会在你的情况下工作repeatActionForever将运行最后创build的随机值。 永远。 也许试试这个。 我不确定这是否工作,但:

 SKAction* delayFish = [SKAction waitForDuration: (((double)arc4random() / ARC4RANDOM_MAX) * (maxValue - minValue)+ minValue)/_moving.speed]; 

我build议尽可能使自己的方法随机值。

 -(double) getRandomValue(){ return (((double)arc4random() / ARC4RANDOM_MAX) * (maxValue - minValue)+ minValue); } 

编辑:

这是一个类似问题的链接。 也许这可能有帮助。 抱歉!

 SKAction *randomXMovement = [SKAction runBlock:^(void){ NSInteger xMovement = arc4random() % 20; NSInteger leftOrRight = arc4random() % 2; if (leftOrRight == 1) { xMovement *= -1; } SKAction *moveX = [SKAction moveByX:xMovement y:0 duration:1.0]; [aSprite runAction:moveX]; }]; SKAction *wait = [SKAction waitForDuration:1.0]; SKAction *sequence = [SKAction sequence:@[randomXMovement, wait]]; SKAction *repeat = [SKAction repeatActionForever:sequence]; [aSprite runAction: repeat]; 

来源: SKAction:如何animation随机重复动作