0
    ライオンさんが襲ってくるようになったのはいいのですが、
    アプリを起動した瞬間に襲ってきて、
    心の準備をする余裕がない... ということで、

    今回は「ゲームをスタートするボタン」を作りたいと思います

    [今回の内容]
    ■ゲームのスタートボタンを作る
    ■スタートボタンのアクション
    ■スタートボタンを消す

    ■ゲームのスタートボタンを作る

    「ゲームをスタートするボタン」なので、
    まずは、UIButton (startBT)を作っていきたいと思います
    と同時に、ゲームがスタートしたか否かを判定する
    BOOLの変数 (startFlag)も作っておきます

    TestGameViewController.h から

    UIImageView *greenIV, *kirinIV, *lionIV;
       
    UIButton *moveLBT, *moveRBT, *startBT;
       
    BOOL moveLFlag, moveRFlag, startFlag;

    startBT1

    TestGameViewController.m に移ります

    -(void)loadView の中に追加
    moveRBT = [[UIButton alloc] initWithFrame:CGRectMake(170.0, 400.0, 80.0, 50.0)];
    [moveRBT setTitle:@"R->" forState:UIControlStateNormal];
    [moveRBT setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [moveRBT addTarget:self action:@selector(moveR_touchDown:)
                   forControlEvents:UIControlEventTouchDown];
    [moveRBT addTarget:self action:@selector(moveR_touchUp:)
         forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];
    moveRBT.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:moveRBT];

    startBT = [[UIButton alloc] initWithFrame:CGRectMake(100.0, 300.0, 120.0, 80.0)];
    [startBT setTitle:@"START" forState:UIControlStateNormal];
    [startBT setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [startBT addTarget:self action:@selector(start_touchUp:)
         forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:startBT];

    ボタンの作り方はこれまでと同じです
    ただし、ボタンを押す動作は、
    UIControlEventTouchUpInside(ボタンを押してボタンの内側であげたとき)
    だけを指定します

    そして、ボタンのアクションは、青字の「start_touchUp」としておいて、
    この内容は、後ほど記述します

    ついでに、今の状態ではキリンさんがライオンさんの進路上にいて、
    常に危険と隣り合わせなので、ちょっと横にずらしておきます

    kirinIV = [[UIImageView alloc] initWithFrame:CGRectMake(60.0, 220.0, 40.0, 40.0)];
    kirinIV.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:kirinIV];

    startBT2

    そして、dealloc は忘れずに

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

    startBT3

    これでボタンの作成は終了しましたので、
    次は、スタートボタンの動作を記述しましょう

    ■スタートボタンのアクション

    まずは、初期化から -(void)loadView の中で、

    moveLFlag = FALSE;
    moveRFlag = FALSE;
    startFlag = FALSE;

    startFlag1

    startFlag を FALSE として「スタートしていない」状態を初期の値にします
    スタートしたときは、startFlag の値を TRUE に変更します

    では、スタートボタンを押したときのアクションを記述します

    - (void) moveR_touchUp:(id)sender
    {   
        moveRFlag = FALSE;
    }

    - (void) start_touchUp:(id)sender
    {   
        startFlag = TRUE;
    }

    startFlag2

    押したら、startFlag は TRUE ですね

    これで、ボタンの作成〜ボタンのアクションまでが完成しました
    とはいえ、このまま[Run]してもボタンが出てくるだけで
    ボタンを押しても見た目の変化は何もありません

    では、startFlag の FALSE と TRUE を切り替えてどうすればいいでしょうか?

    starFlag が FALSE ---> アニメーションさせない
    starFlag が TRUE ---> アニメーションさせる

    現在、アニメーションの記述、キリンさんとライオンさんを動かす記述は、
    すべて、-(void)drawFrame の中にあります

    ということで、その中身をすべて「starFlag が TRUE のときだけ実行する」
    ようにすればよいですね

    早速、中身を全部 if で包んであげましょう

    - (void)drawFrame
    {
        if(startFlag == TRUE){
            if(moveLFlag == TRUE){
                CGRect frame = kirinIV.frame;
                frame.origin.x -= 1.0;
                [kirinIV setFrame:frame];
               
                NSLog(@"MOVE(L):%.1f", frame.origin.x);
            }
           
            if(moveRFlag == TRUE){
                CGRect frame = kirinIV.frame;
                frame.origin.x += 1.0;
                [kirinIV setFrame:frame];
               
                NSLog(@"MOVE(R):%.1f", frame.origin.x);
            }
           
            CGRect frame = lionIV.frame;
            frame.origin.y += 1.0;
            if(frame.origin.y > 480.0) frame.origin.y = -40.0;
            [lionIV setFrame:frame];
           
            NSLog(@"LION:%.1f", frame.origin.y);
        }
    }

    startFlag3

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

    スタートボタンを押していないときは、
    ライオンさんも襲ってきませんし、キリンさんも動きません... よね?

    スタートボタンを押すと...

    startBT_a


    これで、ゲームのスタートを実装させることができました

    ... ってか、ボタン邪魔!!

    startBT_b

    これ邪魔ですね... 消えないの?

    消えます

    ■スタートボタンを消す

    では、消しましょう

    ボタンなど、オブジェクトの可視・不可視を切り替えるためには
    hidden」という値を指定すると良いのであります

    startBT の可視・不可視ということですので、
    「startBT.hidden」として指定します

    .hidden のとる値は BOOL値ですので、
    おなじみ TRUE と FALSE で切り替えます

    startBT.hidden = TRUE ---> 見えない
    startBT.hidden = FALSE ---> 見える

    ん?見えないのに TRUE、見えるのに FALSE...
    なんかややこしい!

    hidden の意味が「隠された」状態ということなので、
    わかるのですが、

    ややこしくないですか?ボクだけですかね?

    まぁ、ここはゴネても仕方ないので慣れましょう

    スタートボタンを押したとき...
    - (void) start_touchUp:(id)sender の中に一行加えましょう

    - (void) start_touchUp:(id)sender
    {   
        startFlag = TRUE;
        startBT.hidden = TRUE;
    }

    押したら「隠す」ということで...

    それでは、気合の[RUN]!

    hidden_button

    ゲームをスタートさせるとボタンは消えましたでしょうか?
    そして、ライオンさんは襲ってきましたか?

    ちょっとゲームっぽくなってきましたね

    ちなみに、「hidden」はボタンのためだけのものではありませんので、
    UIImageView や 今は使っていませんが、UILabel(ラベル)などにも使えます

    なので、

    - (void) start_touchUp:(id)sender
    {   
        startFlag = TRUE;
        startBT.hidden = TRUE;

        moveLBT.hidden = TRUE;
        moveRBT.hidden = TRUE;
        kirinIV.hidden = TRUE;
        lionIV.hidden = TRUE;
        greenIV.hidden = TRUE;
    }

    なんて書いてしまうと、
    ボタンを押すと同時に何もない静かな荒野が広がることになります

    ...

    さて次回は?

    皆さんお気づきかもしれませんが、
    キリンさんはライオンさんに襲われても、なんとも何も起こりません

    仲良しなの?

    次回は、キリンさんとライオンさんが仲良しではないところを

    お見せすることに... いたしましょう

    ウヘヘヘヘヘ...




    コメント
    コメントする








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

    Calendar
    S M T W T F S
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
    << August 2019 >>
    My Apps
    有料アプリ

    無料アプリ

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