1

次のコードを使用して、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"];
4

2 に答える 2

0

固定フロートの代わりにランダムフロートを挿入します。

あなたの場合、次のようなものです:

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: ランダムに繰り返されるアクションをアニメーション化する方法

于 2014-07-25T05:54:01.727 に答える