0

コンピューター制御の敵プレイヤーを敵の番になるたびに6回所定の距離でアニメーション化するメソッド内にforループを作成しようとしています。現在、以下のコードでは、敵はプレイヤーのキャラクターに向かって移動しますが、ループの実行速度が速すぎるため、移動するたびに敵をアニメートするのではなく、最終的な動きのみをアニメートします。

基本的に、私がやろうとしているのは、ループの終わりに短い(.75秒)遅延を引き起こして、ループを許容可能な量まで遅くすることです。私はこの情報をインターネットで高低で検索しましたが、答えが見つからないことに驚いています。信じられないほど簡単なようです。どんな助けでも大歓迎です!

for (int i=0; i<6; i++) {
    // Enemy NE
    if (enemyZombie.center.x < orcIdle.center.x && enemyZombie.center.y > orcIdle.center.y){

        [UIView animateWithDuration:.75 animations:^{ enemyZombie.center = CGPointMake(enemyZombie.center.x + 42.5, enemyZombie.center.y - 30); }];
    }
    // Enemy NW
    if (enemyZombie.center.x > orcIdle.center.x && enemyZombie.center.y > orcIdle.center.y){

        [UIView animateWithDuration:.75 animations:^{ enemyZombie.center = CGPointMake(enemyZombie.center.x - 42.5, enemyZombie.center.y - 30); }];
    }
    // Enemy SE
    if (enemyZombie.center.x < orcIdle.center.x && enemyZombie.center.y < orcIdle.center.y){

        [UIView animateWithDuration:.75 animations:^{ enemyZombie.center = CGPointMake(enemyZombie.center.x + 42.5, enemyZombie.center.y + 30); }];
    }
    // Enemy SW
    if (enemyZombie.center.x > orcIdle.center.x && enemyZombie.center.y < orcIdle.center.y){

        [UIView animateWithDuration:.75 animations:^{ enemyZombie.center = CGPointMake(enemyZombie.center.x - 42.5, enemyZombie.center.y + 30); }];
    }
}
4

1 に答える 1

3

UIViewのセレクターの完了ブロックを使用してanimateWithDuration:animations:completion:、次のようにループ内の次のステップを再帰的に実行できます。

-(void)moveEnemyZombieWithSteps:(int)steps
{
    // check for end of loop
    if (steps == 0) return;

    // Enemy NE
    if (enemyZombie.center.x < orcIdle.center.x && enemyZombie.center.y > orcIdle.center.y)
    {

        [UIView animateWithDuration:.75
                         animations:^{ enemyZombie.center = CGPointMake(enemyZombie.center.x + 42.5, enemyZombie.center.y - 30);}
                         completion:^(BOOL finished){[self moveEnemyZombieWithSteps:steps - 1];}];
    }
    // Enemy NW
    ...
}

//start moving
moveEnemyZombieWithSteps(6);

コードをテストしていませんが、あなたはアイデアを得るでしょう:-)

于 2012-09-03T15:50:56.103 に答える