固定フロートの代わりにランダムフロートを挿入します。
あなたの場合、次のようなものです:
double value = ((double)arc4random() / ARC4RANDOM_MAX)
* (maxValue - minValue)
+ minValue;
SKAction* delayFish = [SKAction waitForDuration:value/_moving.speed];
分かりました。repeatActionForever は最後に作成されたランダム値で実行されるため、これはあなたの場合には機能しません。永遠に。代わりにこれを試してみてください。これが機能するかどうかはわかりませんが:
SKAction* delayFish = [SKAction waitForDuration: (((double)arc4random() / ARC4RANDOM_MAX) * (maxValue - minValue)+ minValue)/_moving.speed];
ただし、ランダム値を独自の方法にすることをお勧めします。
-(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: ランダムに繰り返されるアクションをアニメーション化する方法