夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

【BeeCluster】2面を途中まで作った

BeeClusterの2面を途中まで作りました。
今ボスの絵を描いている途中なのでボスは登場しません、
1面のボスだったノコギリクワガタが中ボスとして何匹か出てきます。
それでは、プレイ動画をご覧ください。

難易度を結構高めにしたので中ボスでやられてしまいました。
中盤に出てくるスズメバチはちょっとトリッキーな動きになっています。

動きの特性は最高速度、最高加速度、ブレーキを掛けるタイミングで調整します。
このスズメバチの場合はブレーキをかなり遅め、最高加速度を少なめに設定しています。

毒グモは遅い弾と速い弾を撃ち分けて来ます。
プログラムはこのようになっています。

- (id)downWithFG1
{
    float difficulty = [DifficultyManager sharedDifficulty].difficulty;
    float speed = 110.0;
    float distance = 30;
    CGPoint vector = ccp(0, -distance);
    id down = [CCMoveBy actionWithDuration:distance/speed position:vector];
    id shoot = [CCCallBlock actionWithBlock:^{
        if (MYRAND(0, 6) <= difficulty) {
            if (MYRAND(0,10) <= 5) {
                [self shootFast];
            } else {
                [self shootSlow];
            }
        }
    }];
    id spawn = [CCSpawn actions: down, shoot, nil];
    return spawn;
}

画面左右の前景は100pixel/秒でスクロールさせていて、クモの巣もそれに合わせています。
が、クモは少し早めの110pixel/秒に調整しました。
クモは弾を吐かせるために30ピクセル単位で移動と弾吐き用CCCallBlockアクションを繰り返します。
アクションを30ピクセル毎に掛け直すのが原因で余分な時間を使ってしまうのだと思いますが、同じ速度設定だとだんだんクモが遅れてクモの巣からずれて行ってしまいます。
それを防ぐために速度を早めにしてあげています。

difficultyは難易度調整用の変数で1から10の値が入ります。
いまは1固定にしていますが、将来的には自機の数に合わせて難易度をあげて行こうか思っています。難易度は弾の発射確率や敵キャラの速度調整などにつかえます。
上記では弾の発射確率の調整に使っています。
MYRANDは2つの引数の間の数値を返すマクロです。詳細はこちらのポストをご参照下さい。
MYRAND(0, 6) <= difficulty
のように使うと、difficulty/6の確率で真となります。
difficultyが上がるにつれ確率が高くなります。difficultyが6以上になると100%

MYRAND(0, 10) <= 5
の場合は5/10 = 1/2の確率になります。これは遅い弾を吐くか速い弾を吐くかを決めています。