0
    当たり判定の実装を終え、
    今回は、UIImageViewの作成、移動などをおさらいしながら、
    よりゲームらしさを付け加えていきたいと思います

    [今回の内容]
    ■UIImageViewを追加する
    ■キリンさんの移動を制限する
    ■キリンさんにリンゴを食べさせる
    ■リンゴを再び実らせる

    ■UIImageViewを追加する

    今の状態では、単にライオンさんが上から下に走り、
    キリンさんは横でそれを傍観するだけ...

    キリンさんがライオンさんに果敢に挑む必要はありません

    ということで、キリンさんに少し冒険をしていただきましょう

    ...

    さてまずは、UIImageView を4つ用意しましょう

    TestGameViewController.h に記述します

    UIImageView *greenIV, *kirinIV, *lionIV,
                          *tree1IV, *tree2IV, *apple1IV, *apple2IV;
       
    UIButton *moveLBT, *moveRBT, *startBT;

    木を2本と、リンゴを2つ用意します
    わかりやすく二行に分けて記述しています
    二行に分ける際の「,」の使い方も確認してください

    .m

    では、いつものようにUIImageViewを作成しましょう
    TestGameViewController.m に移動して - (void)loadView に記述します

    lionIV = [[UIImageView alloc] initWithFrame:CGRectMake(140.0, 0.0, 40.0, 40.0)];
    lionIV.backgroundColor = [UIColor colorWithRed:0.9 green:0.7 blue:0.5 alpha:1.0];
    [self.view addSubview:lionIV];
       
    tree1IV = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 215.0, 50.0, 50.0)];
    tree1IV.backgroundColor = [UIColor greenColor];
    [self.view addSubview:tree1IV];
       
    tree2IV = [[UIImageView alloc] initWithFrame:CGRectMake(270.0, 215.0, 50.0, 50.0)];
    tree2IV.backgroundColor = [UIColor greenColor];
    [self.view addSubview:tree2IV];
       
    apple1IV = [[UIImageView alloc] initWithFrame:CGRectMake(25.0, 235.0, 20.0, 20.0)];
    apple1IV.backgroundColor = [UIColor redColor];
    [self.view addSubview:apple1IV];
       
    apple2IV = [[UIImageView alloc] initWithFrame:CGRectMake(275.0, 235.0, 20.0, 20.0)];
    apple2IV.backgroundColor = [UIColor redColor];
    [self.view addSubview:apple2IV];

    木は緑色で画面右端中央に1本、左端中央に1本植えます
    右側の木の座標には、特に注意してください

    そして、リンゴは赤く色づけし、木に重なるように配置します

    .h

    さあ...

    ...


    久しぶりなので忘れていませんか?

    しっかり、dealloc しておきましょうね

    - (void)dealloc
    {
        [startBT release];
        [moveRBT release];
        [moveLBT release];
       
        [tree1IV release];
        [tree2IV release];
        [apple1IV release];
        [apple2IV release];
       
        [lionIV release];
        [kirinIV release];
        [greenIV release];
       
        [super dealloc];
    }

    dealloc

    それでは、[Run]!

    リンゴの木

    見事なリンゴの木を植えられましたか?

    美味しそうなリンゴですね

    ...

    ■キリンさんの移動を制限する

    さて、リンゴの木を植えることはできましたが、
    このままでは、キリンさんはリンゴの木の下を
    何事もないように通過できてしまいます

    すり抜ける

    そこで、リンゴの木が、
    キリンさんの移動を制限し、
    リンゴの木によって行く手をさえぎる記述をしてみましょう

    それには、ライオンさんが画面の一番下に行ったときに
    再び上に戻す記述を応用します

    内容は、
    「キリンさんがリンゴの木に10ピクセル重なった位置より先を移動不可能にする」
    です

    言葉ではよくわからないので、
    早速 - (void)drawFrame の中に記述します

    if(moveLFlag == TRUE){
         CGRect frame = kirinIV.frame;
         frame.origin.x -= 1.0;
         if(frame.origin.x <= 40.0){
              frame.origin.x = 40.0;
         }
         [kirinIV setFrame:frame];
               
         //NSLog(@"MOVE(L):%.1f", frame.origin.x);
               
         CGPoint center = kirinIV.center;
         kirinX = center.x;
         kirinY = center.y;
    }
           
    if(moveRFlag == TRUE){
         CGRect frame = kirinIV.frame;
         frame.origin.x += 1.0;
         if(frame.origin.x >= 240.0){
              frame.origin.x = 240.0;
         }
         [kirinIV setFrame:frame];
               
         //NSLog(@"MOVE(R):%.1f", frame.origin.x);
               
         CGPoint center = kirinIV.center;
         kirinX = center.x;
         kirinY = center.y;
    }

    キリンさんの左移動と右移動の中に赤い部分を追加します
    左移動の赤い部分は、
    もし、キリンさんのX座標が40ピクセル以下になるときは、40ピクセルで固定する
    右移動の赤い部分は、
    キリンさんのX座標が240ピクセル以上になるときは、240ピクセルで固定する
    という意味になります

    stop

    ではでは、[Run]といきましょう!

    「スタート」を押して、左へ移動... 右へ移動...

    left

    画像のように、キリンさんが左へ進むと
    X座標が40ピクセルの位置でそれ以上進まなくなります

    right

    そして、反対に右に進むと
    X座標が240ピクセルの位置でそれ以上進まなくなります

    うまくいきましたか?

    これで、キリンさんの行動範囲が狭められ、
    画面から外に逃げ出すことができなくなりました

    ...

    ■キリンさんにリンゴを食べさせる

    次は、せっかくリンゴが実っているのですから、
    キリンさんにリンゴを食べてもらいましょう

    では、キリンさんが
    左端に到達したときに左側のリンゴを食べ(消し)、
    右端に到達したときに、右側のリンゴを食べる(消す)
    記述をしたいと思います

    UIImageViewを消すのは、hidden でしたね?

    それでは、- (void)drawFrame の中へ

    if(moveLFlag == TRUE){
         CGRect frame = kirinIV.frame;
         frame.origin.x -= 1.0;
         if(frame.origin.x <= 40.0){
              frame.origin.x = 40.0;
              if(apple1IV.hidden == FALSE){
                   apple1IV.hidden = TRUE;
              }
         }
         [kirinIV setFrame:frame];

         //NSLog(@"MOVE(L):%.1f", frame.origin.x);

         CGPoint center = kirinIV.center;
         kirinX = center.x;
         kirinY = center.y;
    }
           
    if(moveRFlag == TRUE){
         CGRect frame = kirinIV.frame;
         frame.origin.x += 1.0;
         if(frame.origin.x >= 240.0){
              frame.origin.x = 240.0;
              if(apple2IV.hidden == FALSE){
                   apple2IV.hidden = TRUE;
              }
         }
         [kirinIV setFrame:frame];
               
         //NSLog(@"MOVE(R):%.1f", frame.origin.x);
               
         CGPoint center = kirinIV.center;
         kirinX = center.x;
         kirinY = center.y;
    }

    左右両端に到達したときの記述内に、
    3行ずつ赤い部分を追加しています

    まず、
    キリンさんのX座標40ピクセル以下になったとき
     もし、左のリンゴ画像(apple1IV)が「見えていたら(.hidden == FALSE)」
     左のリンゴ画像(apple1IV)を「見えなくする(.hidden = TRUE)」

    そして、
    キリンさんのX座標240ピクセル以上になったとき
     もし、右のリンゴ画像(apple2IV)が「見えていたら(.hidden == FALSE)」
     左のリンゴ画像(apple2IV)を「見えなくする(.hidden = TRUE)」

    となっています

    eat

    それでは、[Run]で確認しましょう

    左に移動します...

    left_apple

    右に移動します...

    right_apple

    キリンさんは美味しいリンゴを食べることができました

    ...と、食べるリンゴがなくなって、
    キリンさんのやることもなくなってしましました

    ...

    ■リンゴを再び実らせる

    それではやっぱり寂しいので、
    片一方のリンゴを食べたとき、
    もう片方のリンゴの木に再びリンゴの実をつける記述をしましょう

    もちろん、- (void)drawFrame の中に記述します

    if(moveLFlag == TRUE){
         CGRect frame = kirinIV.frame;
         frame.origin.x -= 1.0;
         if(frame.origin.x <= 40.0){
              frame.origin.x = 40.0;
              if(apple1IV.hidden == FALSE){
                   apple1IV.hidden = TRUE;
                   if(apple2IV.hidden == TRUE) apple2IV.hidden = FALSE;
              }
         }
         [kirinIV setFrame:frame];

         //NSLog(@"MOVE(L):%.1f", frame.origin.x);

         CGPoint center = kirinIV.center;
         kirinX = center.x;
         kirinY = center.y;
    }

    if(moveRFlag == TRUE){
         CGRect frame = kirinIV.frame;
         frame.origin.x += 1.0;
         if(frame.origin.x >= 240.0){
              frame.origin.x = 240.0;
              if(apple2IV.hidden == FALSE){
                   apple2IV.hidden = TRUE;
                   if(apple1IV.hidden == TRUE) apple1IV.hidden = FALSE;
              }
         }
         [kirinIV setFrame:frame];

         //NSLog(@"MOVE(R):%.1f", frame.origin.x);

         CGPoint center = kirinIV.center;
         kirinX = center.x;
         kirinY = center.y;
    }

    まずは、左側の記述
    左側のリンゴを消したとき、
    もし、右側のリンゴが消えていたら、右側のリンゴを表示させる

    次は
    右側のリンゴを消したとき、
    もし、左側のリンゴが消えていたら、左側のリンゴを表示させる

    という内容です

    再表示

    それでは、今回最後の[Run]!

    再表示

    まずは左へ移動して、左のリンゴを食べましょう

    それから右へ移動...

    再表示

    右のリンゴを食べた瞬間、左のリンゴが復活しました〜!

    繰り返し、何度も何度もリンゴを食べたって、
    反対側のリンゴの木に実がつきますね

    食べ放題!!

    ライオンさんを上手にかわしながら、
    美味しいリンゴをたくさん食べてください

    ...

    では次回は?

    次回は、キリンさんがたくさんのリンゴを食べても
    いくつリンゴを食べたのかわからない...

    このままじゃ、おなかこわしちゃうよ〜

    ということで、リンゴをいくつ食べたかカウントし、
    ラベルに個数を表示させたいと思います

    初登場のラベル、UILabel を使いま〜す!



    コメント
    コメントする








       
    この記事のトラックバックURL
    トラックバック

    Calendar
    S M T W T F S
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
    << May 2018 >>
    My Apps
    有料アプリ

    無料アプリ

    Selected entries
    Categories
    AdSense
    Sponsored Links
    Archives
    Recent comment
    Links
    Profile
    Search this site.
    Others
    Mobile
    qrcode
    powered
    無料ブログ作成サービス JUGEM